此题的解决思路为:根据异或我们可以知道,两个数字的二进制位按位异或,相同为0,相异为1。
因此我们可以通过将两个数字按位异或,并计算该异或结果中二进制位中1的个数,即可知道有多少个比特位不同。
具体代码如下:
int count(int a, int b)
{
int m = a ^ b; // 两个数按位异或,对应不同的位将会置1
int num = 0;
while (m>0)
{
m =m & (m - 1);//按位与方法计算一个整数中比特位为1的个数
num++;
}
return num;
}
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m = 0;
int n = 0;
int ret = 0;
printf("请输入两个数\n");
scanf("%d %d", &m, &n);
ret = count(m,n);
printf("有%d个比特位相同\n",ret);
system("pause");
return 0;
}