两个数二进制中不同位的个数

Posted L_add

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个数二进制中不同位的个数相关的知识,希望对你有一定的参考价值。

两个数二进制中不同位的个数

题目内容:
编程实现:两个int(32位)整数m和整数n的二进制表达中,有多少个位(bit)不同?
例:
输入:1999 2299
输出: 7

int count_dif(int m, int n)
{
	int i;
	int count = 0;
	for (i = 0; i < 32; i++)
	{
		if (((m >> i) & 1) != ((n>>i)&1))
			count++;
	}
	return count;
}
int main()
{
	int m, n;
	scanf("%d%d", &m, &n);
	int ret = count_dif(m, n);
	printf("%d\\n", ret);
	return 0;
}

优化:

int count_dif(int m, int n)
{
	int count = 0;
	int tmp = m^n;
	while (tmp)
	{
		tmp = tmp&(tmp - 1);
		count++;
	}
	return count;
}
int main()
{
	int m, n;
	scanf("%d%d", &m, &n);
	int ret = count_dif(m, n);
	printf("%d\\n", ret);
	return 0;
}

以上是关于两个数二进制中不同位的个数的主要内容,如果未能解决你的问题,请参考以下文章

C语言求两个数中不同的位的个数

[C语言]习题练习3

poj3875 Lights

Verilog中,判断两个数是不是相等,一个数16位,一个数17位,16位的能自动补0吗?

深入理解按位异或运算符

深入理解按位异或运算符