Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 仅使用按位操作计算设置的位数_C_Logic_Bit Manipulation - Fatal编程技术网

C 仅使用按位操作计算设置的位数

C 仅使用按位操作计算设置的位数,c,logic,bit-manipulation,C,Logic,Bit Manipulation,可能重复: 仅使用!~&^ |+>运算符,我需要计算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 +=

可能重复:

仅使用!~&^ |+>运算符,我需要计算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) 搜索一点位计数算法会给你一堆链接。

这只是一些sudocode,我认为不可能只使用指定的运算符构造循环。