在不使用for或while循环且不使用大于0xFF的常量的情况下,计算C中32位整数x中1的数量的最佳方法是什么?
我想到的是将x 24向右移动并计算移位整数中的1到1并将其存储在变量计数中。然后,将x 16向右移动并将移位计数乘以移位整数中的1的数量,依此类推。
那么,任何更好的解决方案的想法?
答案 0 :(得分:1)
您可以将所有d
位数中的1的数量制成表格。这会得到一个2^d
条目表,每个条目的值不超过d
(<255
)。
现在,您可以在d
位的切片中剪切数字,并查找所有切片的计数。
空间/操作次数之间的良好折衷可能是d=4
(8
切片,表格大小= 16
)。