要求:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
思路:
将两个数进行按位异或,此时相同的二进制比特位清零,不同的二进制比特位为1;采用按位与统计异或完成后结果的二进制比特位中有多少个1。
实现:
#include <stdio.h>
#include <windows.h>
int DifferBit(int a, int b){
int temp = a^b;
int count = 0;
while (temp){
temp = temp&(temp - 1);
count++;
}
return count;
}
int main(){
int m = 0;
int n = 0;
printf("Please enter two operands:\n");
scanf_s("%d %d", &m, &n);
int res=DifferBit(m, n);
printf("The different bits are:%d\n", res);
system("pause");
return 0;
}
运行结果: