求两个整数之间的汉明码距离,我想的是将其不断的右移,然后判断最低位是不是一样的。
代码如下:
题目来源
class Solution {
public:
int hammingDistance(int x, int y) {
int res = 0;
while (x > 0 || y > 0) {
if (x % 2 != y % 2)
res++;
x = x >> 1;
y = y >> 1;
}
return res;
}
};
然后想想实际上直接把两个数异或一下,然后判断有多少位是1。
代码如下:
class Solution {
public:
int hammingDistance(int x, int y) {
int dis = 0, n = x ^ y;
while (n > 0) {
if (((n >> 1) << 1) != n)//重点在这,通过左移再右移判断最后一位是不是1
dis++;
n >>= 1;
}
return dis;
}
};
或者直接一行代码解决:
class Solution {
public:
int hammingDistance(int x, int y) {
return bitset<32>(x^y).count();
}
};