两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:
7
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int differ_bits1(int x, int y)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (((x >> i) & 1) != ((y >> i) & 1))
{
count++;
}
}
return count;
}
int differ_bits2(int x, int y)
{
int count = 0;
int res = x ^ y;
while (res)
{
res &= res - 1;
count++;
}
return count;
}
int differ_bits3(int x, int y)
{
int count = 0;
for (int i = 1; i != 0; i <<= 1)
{
if ((x & i) != (y & 1))
{
count++;
}
x >>= 1;
y >>= 1;
//提高效率
if (x == 0 && y == 0)
{
break;
}
}
return count;
}
int main()
{
int m = 0;
int n = 0;
printf("输入两个整数m,n:\n");
scanf("%d %d", &m, &n);
int ret1 = differ_bits1(m, n);
printf("differ_bits1: m和n的二进制表达中,有%d个位(bit)不同\n", ret1);
int ret2 = differ_bits2(m, n);
printf("differ_bits2: m和n的二进制表达中,有%d个位(bit)不同\n", ret2);
int ret3 = differ_bits3(m, n);
printf("differ_bits3: m和n的二进制表达中,有%d个位(bit)不同\n", ret3);
return 0;
}