汉明距离直觉

时间:2017-01-31 14:07:23

标签: c++

我最近偶然发现了这段代码found on Wikipedia,想要澄清一下发生了什么:

int hamming_distance(unsigned x, unsigned y)
{
int dist = 0;
unsigned  val = x ^ y;

// Count the number of bits set
while (val != 0)
{
    // A bit is set, so increment the count and clear the bit
    dist++;
    val &= val - 1;
}

// Return the number of differing bits
return dist;
}

对两个输入执行XOR运算有什么意义?

1 个答案:

答案 0 :(得分:2)

该函数基本上返回输入数字之间不同位的数量。

这是通过 XOR 来实现的 - 这两个数字将产生一个输出,其中只有那些位将设置为1,不同(检查表here)。

从那时起,它只是计算 XOR产生的输出中的位并返回它们。