问题描述:
编程实现:
两个int(32位)整数m和n的二进制表达中,
有多少个位(bit)不同?
例如:137(1000 1001)和248(1111 1000)一共有4位不同;
1999(111 1100 1111)和2299(1000 1111 1011)一共有7位不同;
思路:
对于这个问题,我采用两种做法:
第一种做 法:先把每个数字的二进制位取出来,然后逐一进行比较,定义一个变量count计数,有不同的数位即加一,最后输出count即可得到m和n有多少位不同;
参考代码:
void Get(int m,int n)
{
int i = 31;
int count = 0;
while (i >= 0){
if (((m >> i) & 1 )!= ((n >> i) & 1)){
count++;
}
i--;
}
printf("%d 和 %d 有 %d 个二进制位不同\n",m,n,count);
}
第二种做法:将要比较的两个数字m和n进行异或运算<^>,然后,把得到的值赋给一个新的变量a,这样a的二进制位中,所有的’ 1 ‘都代表的是,原来的两个变量的二进制位中不同的数位;再计算出a中所有的’ 1 '即可得到m和n有多少位不同。
参考代码: