10.2Hamming Distance位运算基础问题
题目描述
给定两个十进制数字,求他们二进制表示的汉明距离(Hamming Distance, 即不同位的个数)
输入输出样例
Input :x = 1, y = 4;
Output:2
在这个样例中,1的二进制是0001,4的二进制是0100,一共有两位不同
题解
进行按位异或操作,统计有多少个1
cpp
#include <iostream>
using namespace std;
// 汉明距离:两个数字二进制 对应位不同 的数量
int hammingDistance(int x, int y) {
// 第一步:异或运算 x ^ y
// 规则:相同为0,不同为1
// 例子:x=1(0001), y=4(0100)
// 异或结果:0101 → 十进制 5
int diff = x ^ y;
int ans = 0; // 统计 1 的个数(即不同位的数量)
// 第二步:循环检查每一位是不是 1
// 当 diff 不为0时,继续检查
while (diff) {
// 第三步:diff & 1 → 取**最后一位**
// 与运算,两个都为 1 → 结果才是 1
// 如果最后一位是1,ans+1;是0则+0
ans += diff & 1;
// 第四步:右移1位 → 把已经检查过的最后一位扔掉
// 等价于:diff = diff / 2
diff >>= 1;
}
// 最终 ans 就是二进制不同位的数量
return ans;
}
int main() {
int x = 1, y = 4;
cout << hammingDistance(x, y) << endl;
return 0;
}