思考:两个整数进行异或的结果是:相同位异或结果为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;