int countBits(int n) { int count = 0; while (n) { count += n & 1; //count=count+n&1 //n&1的结果只可能是1或者0 //如果对应的二进制位上的数字不同,那么n&1的结果就是1, //那么count 刚好加一 n >>= 1; //将n的二进制数列向右移动一位 //换下一个数进行比较 } return count; } int main() { int m, n; scanf("%d %d", &m, &n); //异或操作可以直接比较两个整数的对应位。 // 当两个整数的对应位相同时,异或结果为0; // 当对应位不同时,结果为1。 // 这意味着异或结果的每一位都直接告诉 // 我们原始两个整数在该位上是否不同。 int result = m ^ n;//算出m和n的异或值,再将算出来的值带到函数进行计算 int differentBits = countBits(result); printf("不同的数有%d个", differentBits); return 0; } //先得在外面将m和n的异或值求出来 //在异或的作用下,两个整数的二进制序列的不同都显现出来了
临近期末--希望各位大牛期末顺利过关,不挂科,加油,未来的大牛们