2017-09-17 57 views
-3

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

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

那么,有更好的解决方案的任何想法?

+0

代码严重依赖于实现定义的行为,即不可移植。它还可以调用未定义的行为,对<25位“int”的平台上的偏移计数过大。移位有符号整数有问题。避免它,除非你能保证符号位不参与(这意味着:只是避免它)。 – Olaf

+0

您的意思是数字的二进制表示或数字的二进制表示 – Mitchel0022

+0

二进制表示的数字 –

回答

1

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

现在您可以在d位的切片中减少您的编号并查找所有切片的计数。

空间/操作次数之间的折衷很可能是d=48切片,表大小= 16)。

+0

这不一定更好,但更糟。 – Olaf

+0

@Olaf:你在说什么? –

+0

最有可能是你写的东西我会说。 – Olaf

相关问题