// 编程实现两个int(32位)整形m和n的二进制表达中,有多少不同的(bit)
输入例子:1999和2299,输出为7
知识点:
判断一个二进制中 1 的个数,可以在while(n)中实现:n = n & (n - 1);解释如下:
每次n &(n - 1),1的个数减一
解题思路:
1> 先对两个数按位异或,将两个数中的不同为用 1 表示;
2> 使用上面的知识点对 1 的个数进行计算;
3> 打印计算结果。
源代码:
#include<stdio.h>
#include<stdlib.h>
//编程实现两个int(32位)整形m和n的二进制表达中,有多少不同的(bit)
//输入例子:1999和2299,输出为7
int Print(int n, int m)
{
int count = 0;
//按位异或:相同为0,不同为1;
int ret = n ^ m;
while (ret)
{
ret = ret & (ret - 1);
count++;
}
return count;
}
int main()
{
printf("%d\n", Print(1999, 2299));
system("pause");
return 0;
}
运行结果: