两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。
1. 利用bitset来处理二进制位
int hammingDistance(int x, int y) {
int count = 0;
bitset<31> a(x);
bitset<31> b(y);
for(int i = 0; i < 31; i++)
{
if( a[i] != b[i])
count++;
}
return count;
}
//或
int hammingDistance(const int x, const int y) {
return bitset<32>(x^y).count();
}
异或运算,0^0 == 0, 0^1 == 1, 1^0 == 1, 1^1 == 0
2. 异或操作,每位验证后右移
int hammingDistance(int x, int y) {
int res = 0;
for(int z = x^y;z>0;z=z>>1){
if(z&1==1){
res++;
}
}
return res;
}
3. 除法取余操作
int hammingDistance(int x, int y) {
int count = 0;
while(x || y){
if(x % 2 != y % 2)
count++;
x /= 2;
y /= 2;
}
return count;
}
4. 求汉明权重的固定写法
int hammingDistance(int x, int y) {
int temp=x^y, ans=0;
while(temp!=0){
ans++;
temp&=temp-1;
}
return ans;
}