.编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
例如:m=1999 n=2999
输出:有7个bit位不同
首先思考,如何得知两个数中有多少个不同的个数?
这里可以采用异或运算,相同为0,不同为1;
将m^n的结果保存下来,其中1的个数就是m与n在二进制中bit位不同的数的个数。
接下来就只剩下一个问题等待解决,如何输出m^n的结果中1的个数?
ret=m^n;
ret&(ret-1)可以得到ret中1的个数,这个方法详见:
三种方法返回二进制中1的个数
最后代码如下:
int main(){
int a = 1999;
int b = 2999;
int m = a^b; //异或运算:相同为0,相异为1
int count = 1;
while (m){ //求m中1的个数
m &= m - 1;
count++;
}
printf("%d与%d的二进制表达中有%d个bit位不同\n", a, b, count);
return 0;
}