1.写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
int countBit(int x)
{
int c = 0;
while (x)
{
x &= (x - 1);//x=x&(x-1)
c++;
}
return c;
}
int main()
{
int x = 15;
int c = countBit(x);
printf("%d\n", c);
return 0;
}
2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
#include<stdio.h>
void print_num(unsigned value)
{
int count = 0;//计算二进制位数
int a[32] = { 0 };
int i = 0;
while (value)
{
a[i++] = value % 2;
value /= 2;
count++;
}
printf("奇数序列\n");
for (i = count; i >= 0; i -= 2)
{
printf("%d ", a[i]);
}
printf("\n");
printf("偶数序列\n");
for (i = count - 1; i >= 0; i -= 2)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
printf("获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列(测试数字01011)\n");
int value = 11;//01011
print_num(value);
return 0;
}
3. 输出一个整数的每一位。
#include <stdio.h>
int main()
{
int a[10]=0;
int n=0;
int i=0;
printf("请输入一个数:");
scanf("%d",&n);
while(n!=0)
{
a[i++]=n%10;
n/=10;
}
for(i--;i>=0;i--)
printf("%d ",a[i]);
}
4.编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
#include <stdio.h>
void fun(int m,int n)
{
int t = 0;
int count = 0;
t=m^n;//得到不同的比特位数
while(t)
{
t&=(t-1);//得到比特位为一的个数
count++;
}
printf("count=%d\n",count);
}
int main()
{
int m = 0;
int n = 0;
int count = 0;
printf("输入两个整数:");
scanf("%d%d",&m,&n);
fun(m,n);
return 0;
}