题意理解
给定两个数,二进制形式下每个对应位置分别是0和1的位置数量就是汉明距离。
问题分析
bit位操作
a&0x1 取最后一位
a^b位相同为0,位不同为1
其他
链接
int hammingDistance(int x, int y) {
int cnt = 0;
while (x || y) //x,y有一个存在
{
cnt += (x & 0x1) ^ (y & 0x1); //取最后一位,异或得到1,累加到总数上
x = x >> 1; //x右移一位
y = y >> 1; //y右移一位
cout << cnt << '\t' << x << '\t' << y << endl;
}
return cnt; //返回1的个数
}
int hammingDistance(int x, int y) {
int n = x ^ y; //x,y异或得到不同的位置数量
int cnt = 0;
while (n != 0) //不为0表示存在1
{
cnt ++; //增加数量
n = n & (n - 1); //n-1表示n中最后1变成0,最后1后面的0都变成1,与之后都变成0,这样就去掉了最后一个1.
}
return cnt;
}