代码如下:
int test(int x,int y){ //方法一: 分别比较x和y二进制中每一位是否相同
int num = 0;
for (int i = 0; i < 32; i++){
if (((x >> i) & 1) != ((y >> i) & 1)){
num++;
}
}
return num;
}
int test1(int x, int y){ // 取变量ret 并赋值为 x^(异或)y的值,即x和y二进制中不同的个数,但是这数是int型
int ret = x ^ y;
int num = 0;
while (ret){ // 将int型的ret不断和(ret-1)相与,直到ret = 0,循环的次数就是ret中1的个数,即x和y中bit不同的个数
num++;
ret = ret & (ret - 1);与
}
return num;
}
int main(){
int x, y;
scanf("%d%d", &x, &y);
printf(" %d\n", test(x, y));
printf(" %d\n", test1(x, y));
return 0;
}
输出结果如下: