Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
在不使用for或while循环且不使用大于0xFF的常数的情况下,在C中计算32位整数x中1的个数的最佳方法是什么?
我想到的是将x 24向右移位,并计算移位整数中有多少个1,并将其存储在变量计数中。然后,将x 16向右移动,并以移位整数中的1的数量递增计数,依此类推。
那么,有什么更好的解决方案的想法吗?
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
在不使用for或while循环且不使用大于0xFF的常数的情况下,在C中计算32位整数x中1的个数的最佳方法是什么?
我想到的是将x 24向右移位,并计算移位整数中有多少个1,并将其存储在变量计数中。然后,将x 16向右移动,并以移位整数中的1的数量递增计数,依此类推。
那么,有什么更好的解决方案的想法吗?
最佳答案
您可以将所有d
位数字中的1的数量制成表格。这将获得一个2^d
条目表,每个条目的值均不超过d
(<255
)。
现在,您可以在d
位的切片中减少数量,并查找所有切片的计数。
在空间/操作数之间可以很好地折衷,可能是使用d=4
(8
切片,表大小= 16
)。
关于c - 计算整数C中1的个数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46269166/