先来分析一下,比如456和457,不同的位数即为1.
**异或是相同为0,不同为1.**我们可以使用异或来方便的解决这个问题,把这两个数异或可以拿到一个二进制数,有多少个1就有多少不同的位数,所以主要任务就成为了如何拿到一个数一的个数,
这最好的办法就是每次右移一位,然后与1,这也是拿到1的个数的最便利的方法。
int diffbit(int m, int n)
{
int temp = 0;
int count = 0;
temp = m^n;
while (temp)
{
temp = temp&(temp - 1);
count++;
}
return count;
}
int main()
{
int m = 445;
int n = 447;
int num = diffbit(m, n);
printf("%d", num);
system("pause");
return 0;