【题目名称】
求两个数二进制中不同位的个数
【题目内容】
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1999 2299
输出例子:7
【位操作符】
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数
& :对应的二进制位都为1 时,则为1;否则为0
| :只要对应的二进制位有一个是1,结果就是1,同为0,才是0
^:对应的二进制位相同为0;不同为1
[代码实现】
#include <stdio.h>
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
int c = a^b;
int count = 0;
for(int i = 0; i<32; i++)
{
if((c&1) == 1)
{
count++;
}
c=c>>1;
}
printf("%d\n", count);
}
return 0;
}
1:00000000000000000000000000000001
假设
c=00000000000000000000000000010101
只有c最后一位为1时,c&1==1
所以用for循环遍历32位
遍历完一位再用>> 右移操作符,把c最后一位移除