可能重复:
计算 32 位整数中设置位数的最佳算法?
我想编写一个程序来比较两个数字时获得 1 的位数。如果我比较任何两个数字之间的位,以找出二进制数在 1 和 0 中的不同之处。换句话说,异或(XOR)关系。
就像 if 22 (它有 10110 二进制)并将它与 15 (它有 01111 二进制)进行比较
第一个 10110
第二个 01111
结果 11001
答案是 25,但我想得到的是 3,其中有三个不同的 1 和 0。
可能重复:
计算 32 位整数中设置位数的最佳算法?
我想编写一个程序来比较两个数字时获得 1 的位数。如果我比较任何两个数字之间的位,以找出二进制数在 1 和 0 中的不同之处。换句话说,异或(XOR)关系。
就像 if 22 (它有 10110 二进制)并将它与 15 (它有 01111 二进制)进行比较
第一个 10110
第二个 01111
结果 11001
答案是 25,但我想得到的是 3,其中有三个不同的 1 和 0。
嗯,想到的第一个非递归的想法是:
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 应该做你正在寻找的东西:
这将是最简单的方法:
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