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的异或值求出来
//在异或的作用下,两个整数的二进制序列的不同都显现出来了
临近期末--希望各位大牛期末顺利过关,不挂科,加油,未来的大牛们
标签:count,int,32,整数,C语言,二进制,异或,对应 From: https://blog.csdn.net/2301_80863610/article/details/139445546