【C语言】两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

根据异或我们可以知道,两个数字的二进制位按位异或,相同为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;
}

 

猜你喜欢

转载自blog.csdn.net/Miss_Monster/article/details/86018726