一、题目简述
汉明距离为两个整数之间不同比特数的位数。给定两个整数 x,y ,计算汉明距。
0≤x,y≤231
二、编程思路
比较不同两个整数 x,y 比特数不同的位数,一种思路可以对其依次右移,比较其最低位是否相同,使用累加器计算相同的位数。
也可以先将 x,y 进行异或得到 z ,则z 二进制串中1的个数即是所求汉明距。从而将问题转化为求二进制数中1的个数。
三、代码实现
使用第二种方法,实现如下:
class Solution { public: int hammingDistance(int x, int y) { int tmp, dis = 0; tmp = x^y; while (tmp > 0){ if (tmp & 1 == 1) dis++; tmp >>= 1; } return dis; } };
四、心得体会
使用位操作可以提高程序速率。