在 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/