解法:
首先把两位数异或,得到的结果,通过自身跟自身-1相与,直到等于0为止
举个例子:
1跟2
1的二进制数是0001
2的二进制数是0010
两位数异或是:0011 这个数对应的十进制为3
然后 3跟(3-1)相与:3跟2相与
0011
0010
————
0010
现在相与完结果为2,2再跟2-1相与
0010
0001
————
0000
现在为0了。执行了两次相与。所以1跟2的二进制数有两位是不相同的。
**相与的原理是:**每次一个数跟自身减一相与完,二进制数的结尾的1会置0
于是可以用c代码来实现这个过程
#include<iostream>
int hammingDistance(int x, int y) {
int temp = x ^ y;
int count = 0;
while (temp!=0) {
++count;
temp &= temp - 1;
}
return count;
}
int main()
{
int a = hammingDistance(1, 2);
return 0;
}