c语言练习题35:求两个数二进制中不同位的个数

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

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

思路:
1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
2. 统计异或完成后结果的二进制比特位中有多少个1

代码:

#include
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 = 0, n = 0;
	scanf("%d%*c%d", &m, &n);
	printf("%d\n", calc_diff_bit(m, n));
	return 0;
}

结果:

c语言练习题35:求两个数二进制中不同位的个数_第1张图片

 

你可能感兴趣的:(c语言,算法,数据结构)