求两个数二进制中不同位的个数
//编程实现:两个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<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 = 0, n = 0;scanf("%d%*c%d", &m, &n);printf("%d\n", calc_diff_bit(m, n));return 0;
}
结果: