对仅使用按位运算设置的位数进行计数
可能重复:
计算32位整数中设定位数的最佳算法?
只使用! 〜&^ | + << >>运算符,我需要计数在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)你计算错误的结果; 31的转变缺失。 2)你应该使用for循环。 3)搜索位计数算法会给你一堆链接。
链接地址: http://www.djcxy.com/p/72601.html上一篇: Count the number of bits set using only bitwise operations
下一篇: Best method to find out set bit positions in a bit mask in C