题目意思是:求两个整数之间的汉明距离是对应位不同的位置的个数。
class Solution {
public:
int hammingDistance(int x, int y) {
if(x==y) return 0;
int count=0;
while(x || y){//排除x,y都是0的情况
if((x&1)!=(y&1)) count++;
x=x>>1;
y=y>>1;
}
return count;
}
};
x&1什么意思:
从命令的角度讲,是将x的每一bit(2进制中的1和0都占一个bit)与0001的每一bit做与运算.
“&”是”与运算”的意思,1&1=1,其他情况(1&0,0&1,0&0)都=0.
从逻辑的角度来讲,这个命令就是取x的最左边一位.例如x是0011,x&1得到0001,如果x是0110,x&1得到0000.
x=x>>1;
c语言程序中x>>=1,如果作用于整数x,就是把x右移一位,把x的二进制值的最后一位丢弃,最高位补0。
实际就是把x的值除以2。在运算结果上等价于x=x/2。
以上是我的理解,有什么问题还请大家多多指正。