求两个数二进制中不同位的个数。
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1999 2299
输出例子:7
方法一
思路:依次比较两个数的每一位是否相异
#include <stdio.h>
int count_diff_bit(int a, int b)
{
int i = 0;
int c = 0;//计数器
for (i = 0; i < 32; i++)
{
if ((a & 1) != (b & 1))
c++;
a >>= 1;
b >>= 1;
}
return c;
}
int main()
{
int a = 1999;
int b = 2299;
int ret = count_diff_bit(a, b);
printf("%d\n", ret);
return 0;
}
方法二
思路:异或操作符,相同为0,相异为1
1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
2. 统计异或完成后结果的二进制比特位中有多少个1即可
#include <stdio.h>
int count_diff_bit(int a, int b)
{
int c = a ^ b;
int count = 0;
while (c)
{
c = c & (c - 1);
count++;
}
return count;
}
int main()
{
int a = 1999;
int b = 2299;
int ret = count_diff_bit(a, b);
printf("%d\n", ret);
return 0;
}