比较两个二进制数,得到不同的位

Compare two binary numbers and get the different bits

本文关键字:二进制数 两个 比较      更新时间:2023-10-16

可能重复:
计算32位整数中集合位数的最佳算法?

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

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

第一个10110

第二个01111

结果11001

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

Hrmmm,脑海中浮现的第一个非递归想法是:

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

std::bitset::count应该执行您想要的操作:

http://www.cplusplus.com/reference/stl/bitset/count/

http://en.cppreference.com/w/cpp/utility/bitset/count

这将是最简单的方法:

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