思考:两个整数进行异或的结果是:相同位异或结果为0,不同位异或结果为1,进一步将问题转化为求这两个整数异或结果的二进制位为1的个数即所求两个数二进制数中不同位的合数。
如何求二进制为1的个数:将这个数与它减一进行按位与,循环执行,当所得结果为0时,循环多少次,1的个数就有多少个。
代码实现:
#include<stdio.h>
int main()
{
int m, n, a, count = 0; //m,n为两数,a为异或结果,count为1的个数
scanf("%d%d", &m, &n);
a = m^n; //进行异或,不同的二进制位都变成1
while (a)
{
count++;
a = a&(a - 1); //求二进制位为1的个数
}
printf("%d\n",count);
return 0;