首先,学习下概念,汉明距离
下面我们要做的是
1.找位不同
2.求位不同的个数
x,y位不同可以用异或(相同的为0,不同的为1)
求异或后1的个数,可以用移位加计数
异或后的二进制result和1进行“与”运算,result&1,只有最后一位是“1”不是0,&的结果才是1,因为0&1=0,0&0=0
这样每次都末位和1与,得1,count++,result右移一位
不得1,result也右移一位
int hammingDistance(int x, int y) {
int result=0,count=0;
result=x^y;
while(result>0){
if((result&1)==1){
count++;
}
result=result>>1;
}
return count;
}
一开始把右移写到while循环里面了,后来和burning一讨论,发现最后一位是不是1都要右移