1.题目

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ x, y < 231.

示例:

  1. 输入: x = 1, y = 4
  2. 输出: 2
  3. 解释:
  4. 1 (0 0 0 1)
  5. 4 (0 1 0 0)
  6. 上面的箭头指出了对应二进制位不同的位置。

2.思路

翻译直白点:两个整数之间的汉明距离是对应位置上数字不同的位数

我们可以利用异或运算来获取有几位不同的数字

  1. public int hammingDistance(int x, int y) {
  2. return Integer.bitCount(x ^ y);
  3. }

当然也可以利用移位操作

向右移一位,不断检查最低位,直到s为0

  1. public int hammingDistance(int x, int y) {
  2. int s = x ^ y, ret = 0;
  3. while (s != 0) {
  4. ret += s & 1;
  5. s >>= 1;
  6. }
  7. return ret;
  8. }