C语言——求两个数二进制中不同位的个数

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

输入例子:

1999 2299

输出例子:7

/*
思路:
1. 先将 m 和 n 进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
2. 统计异或完成后结果的二进制比特位中有多少个1即可
*/
#include <stdio.h>
int calc_diff_bit(int m, int n)
{
    
    
	int tmp = m^n;
	int count = 0;
	while(tmp)
	{
    
    
		tmp = tmp&(tmp-1);
		count++;
	}
	return count;
}


int main()
{
    
    
 int m,n;
 while(1)
 {
    
    
     scanf("%d %d", &m, &n) == 2;
     printf("%d\n", calc_diff_bit(m, n));
 }
 return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45657288/article/details/108741084