2011-09-01 70 views
0
设置的位数

可能重复:
Best algorithm to count the number of set bits in a 32-bit integer?计数只用按位运算

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

Ex。 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

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

+0

这只是一些sudocode,我不认为有可能与指定的操作符构造一个循环。 – Jim