计算仅使用按位运算设置的位数

时间:2011-09-01 14:54:30

标签: c logic bit-manipulation

  

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

仅使用! 〜& ^ | +<< >>运算符,我需要计算32位整数中设置的位数,而只需要直接访问8位。所以只有0xaa而不是0xaaaa

实施例。 0x07 = 3和0x05 = 2

我最多只能使用40个运营商。

现在我的解决方案使用90并且是:

int countBitsSet(int x)
{
int count = 0;
int mask = 0x01 // 00000001

count = (x & mask);
count += (x >> 1) & mask;
count += (x >> 2) & mask;
.
.
.
count += (x >> 31) & mask;

return count;
}

有谁知道将这一步减少一半的方法?我正在考虑找到一种方法来并行或同时进行,并一次计算4位,但我无法弄清楚如何。其他人已经在25个运营商中做过,所以我知道有办法。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

1)你计算错误的结果;缺少31的转变。 2)你应该使用for循环。 3)搜索位计数算法会给你一堆链接。