【发布时间】:2023-03-14 05:17:01
【问题描述】:
我正在研究关于位计数的不同方法,或者给定整数的人口计数方法,在这段时间里,我试图弄清楚以下算法是如何工作的
pop(x)=-sum(x<<i) where i=0:31
我认为在计算x的每个值之后,我们会得到
x+2*x+4*x+8*x+16*x+..............+2^31*x =4294967294*x
如果我们将它乘以-1,我们得到-4294967294*x,但是它如何计算位数?请帮助我很好地理解这个方法。谢谢
【问题讨论】:
-
此方法无效。如果您认为它确实有效,请将其编写在代码中并进行测试。
-
访问此站点:graphics.stanford.edu/~seander/bithacks.html 它解释了您需要的每一个位操作。
-
你确定你有这个权利吗?如果我理解你的符号,那么输入
x=8(例如)给出二进制11111111 11111111 11111111 11111000的总和,所以-sum是二进制00...001000 =十进制8。但是当我手动计算位时,我得到了答案 1. -
它实际上似乎为每个 x 返回
pop(x) == x。 -
这意味着您应该在发布之前尝试过
x的几个值(就像这里的每个人一样)。