【问题标题】:Why is it useful to count the number of bits?为什么计算位数很有用?
【发布时间】:2011-02-07 12:42:49
【问题描述】:

我已经看到了很多关于计算insert type of 输入中设置位数的问题,但它为什么有用?

对于那些寻找有关位计数的算法的人,请看这里:

  1. Counting common bits in a sequence of unsigned longs
  2. Fastest way to count number of bit transitions in an unsigned int
  3. How to count the number of set bits in a 32-bit integer?

【问题讨论】:

    标签: language-agnostic computer-science bit-manipulation bits bitcount


    【解决方案1】:

    您可以将一串位视为set,其中 1 表示相应元素的集合成员资格。因此,位计数为您提供集合的population count

    实际应用包括压缩、加密和纠错码。参见例如wikipedia.org/wiki/Hamming_weightwikipedia.org/wiki/Hamming_distance

    【讨论】:

      【解决方案2】:

      如果您使用自己的奇偶校验方案,您可能需要计算位数。 (当然,一般来说,我宁愿使用其他人的。)如果您正在模拟一台旧计算机并想跟踪它在原始计算机上的运行速度,有些具有乘法指令,其速度随数字而变化1 位。

      在过去十年左右的时间里,我想不出任何时候我想这样做,所以我怀疑这更像是一种编程练习,而不是实际需要。

      【讨论】:

      • 您可以使用比人口计数更少的操作直接计算奇偶校验(除非您的 CPU 有 POPCNT 或类似的)。
      【解决方案3】:

      具有讽刺意味的是,它对于面试问题很有用,因为它需要一些详细的低层次思考,并且似乎没有作为标准算法在计算机科学课程中教授。

      【讨论】:

        【解决方案4】:

        有些人喜欢使用位图来表示“东西”的存在/不存在。

        有一个简单的 hack 可以隔离一个字中最低有效的 1 位,将其转换为它下面的位中的一个字段,然后您可以通过计算 1 位来找到位号。

        countbits((x XOR (x-1)))-1;
        

        观看它的工作。

        Let x =     00101100
        Then x-1 =  00101011
        x XOR x-1 = 00000111
        

        其中设置了 3 位,因此第 2 位是原始单词中最低有效的 1 位

        【讨论】:

          猜你喜欢
          • 2023-03-04
          • 2017-11-27
          • 2020-06-01
          • 2015-03-14
          • 1970-01-01
          • 2011-04-24
          • 2012-03-15
          • 1970-01-01
          • 2010-11-09
          相关资源
          最近更新 更多