1.从最高位开始依次输出:把1左移31位,就是最高比特位,再&1,进行判断0或1;循环直到最低位。
#include<stdio.h>
#include<windows.h>
int showDataBits(int x)
{
int i = 31;
for (i = 31; i>=0; i--)
{
if (x&(1<<i))
{
printf("1");
}
else{
printf("0");
}
}
}
int main()
{
int x = 25;
showDataBits(x);
system("pause");
} 结果是: ![]()
2.通过异或^求出两个数中的不同数,然后计数有多少位不同。输入例子: 1999 2299 。输出结果为:7.
int main()
{
int a = 1999;
int b = 2299;
int count = 0;
int num= a^b;//相异为1,相同为0。求出ab中不同位。
while( num)
{
count++;
num = num&(num - 1);//统计1的位数。
}
printf("%d\n", count);
system("pause");
return 0;
}
通过函数实现:
#include<stdio.h>
#include<windows.h>
int countBit(int i)
{
int n = 0;
while (i){
i = i&(i - 1);
n++;
}
return n;
}
int main()
{
int n=countBit(1999 ^ 2299);
printf("%d", n);
system("pause");
return 0;
}
本文介绍了两种实用的位操作技巧:一是如何通过左移和按位与操作来逐位输出整数的所有比特位;二是利用异或操作来找出两个整数的不同比特位数量,并提供了具体的C语言实现代码。
1773

被折叠的 条评论
为什么被折叠?



