编程实现:两个int整数在二进制表达中有多少个bit位不同??

.编程实现: 两个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;
}

猜你喜欢

转载自blog.csdn.net/gaga_yu/article/details/83243152