【发布时间】:2011-02-07 12:42:49
【问题描述】:
我已经看到了很多关于计算insert type of 输入中设置位数的问题,但它为什么有用?
对于那些寻找有关位计数的算法的人,请看这里:
【问题讨论】:
标签: language-agnostic computer-science bit-manipulation bits bitcount
我已经看到了很多关于计算insert type of 输入中设置位数的问题,但它为什么有用?
对于那些寻找有关位计数的算法的人,请看这里:
【问题讨论】:
标签: language-agnostic computer-science bit-manipulation bits bitcount
您可以将一串位视为set,其中 1 表示相应元素的集合成员资格。因此,位计数为您提供集合的population count。
实际应用包括压缩、加密和纠错码。参见例如wikipedia.org/wiki/Hamming_weight 和 wikipedia.org/wiki/Hamming_distance。
【讨论】:
如果您使用自己的奇偶校验方案,您可能需要计算位数。 (当然,一般来说,我宁愿使用其他人的。)如果您正在模拟一台旧计算机并想跟踪它在原始计算机上的运行速度,有些具有乘法指令,其速度随数字而变化1 位。
在过去十年左右的时间里,我想不出任何时候我想这样做,所以我怀疑这更像是一种编程练习,而不是实际需要。
【讨论】:
POPCNT 或类似的)。
具有讽刺意味的是,它对于面试问题很有用,因为它需要一些详细的低层次思考,并且似乎没有作为标准算法在计算机科学课程中教授。
【讨论】:
有些人喜欢使用位图来表示“东西”的存在/不存在。
有一个简单的 hack 可以隔离一个字中最低有效的 1 位,将其转换为它下面的位中的一个字段,然后您可以通过计算 1 位来找到位号。
countbits((x XOR (x-1)))-1;
观看它的工作。
Let x = 00101100
Then x-1 = 00101011
x XOR x-1 = 00000111
其中设置了 3 位,因此第 2 位是原始单词中最低有效的 1 位
【讨论】: