比较两个二进制数并获得不同的位

时间:2012-03-31 09:23:49

标签: c++ binary hamming-distance

  

可能重复:
  Best algorithm to count the number of set bits in a 32-bit integer?

我想编写一个程序来比较两个数字得到1位数。如果我比较任意两个数字之间的位数 找到二进制数在1和0中的不同之处。 换句话说,异或(XOR)关系。

如果22(具有10110二进制)并将其与15(具有01111二进制)进行比较

第一个10110

第二个01111

结果11001

答案是25,但我想得到的是3,其中有3个1和0是不同的。

3 个答案:

答案 0 :(得分:4)

Hrmmm,我想到的第一个非递归的想法是:

int a = ...;
int b = ...;
int x = a ^ b;

int count;

for (int i = 0; i < 32; ++i) {
    if (x & (1 << i)) {
        ++count;
    }
}

答案 1 :(得分:2)

答案 2 :(得分:0)

这是最简单的方法:

int count_bits(int a)
{
    int mask;
    int count = 0;
    for (mask = 1; mask; mask <<= 1)
    {
        if (mask & a) ++count;
    }
    return count;
}

如果你想要一些更有趣的东西,请看一下:http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive