计算整数 C 中 1 的数量

标签 c bit

在 C 中计算 32 位整数 x 中 1 的数量的最佳方法是什么,而不使用 for 或 while 循环,并且不使用大于 0xFF 的常量?

我想到的是向右移动 x 24 并计算移位后的整数中有多少个 1,并将其存储在变量 count 中。然后,向右移动 x 16 并将 count 增加移动后的整数中 1 的数量,依此类推。

那么,有更好的解决方案吗?

最佳答案

您可以列出 d 中 1 的数量位数。这需要一个表 2^d条目,每个条目不超过值 d (<255)。

现在您可以将您的号码切成 d 的片段位并查找所有切片的计数。

空间/操作数量之间的一个很好的折衷可能是 d=4 ( 8 切片,表大小= 16 )。

关于计算整数 C 中 1 的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46269166/

相关文章:

arrays - 第 8 章 KNK C 编程(数组和 boolean 值)中重复数字工作示例的替代解决方案

mysql - 如何在MySQL中为多条记录的字段添加一个位值

c - strcat,将字符(文本)发送到函数中的参数 - c

c - 通过 shell (cat) 或通过程序 (fread) 读取 proc 文件的区别

c++ - 将 wchar 转换为字符串并插入 vector (C/C++)

c++ - 获取 64 位整数内的位位置数组

c++ - 使用 6 位设置 float 的小数部分

java,在单个操作中将前 3 位从一个字节传输到另一个字节

c - 在 C 中移位位值

c - sscanf 和字符串