【问题标题】:Generate an array of numbers from a number and a mask of bits in C++从 C++ 中的数字和位掩码生成数字数组
【发布时间】:2013-12-03 15:04:12
【问题描述】:

我想创建一个从位掩码返回数字数组(或向量)的函数,我的函数头将是:

vector generateArray(int number, int maskSize)

如果我这样调用这个函数:

generateArray(4,2)

4 等于二进制的 100,

它会返回一个包含这些数字的向量:5、6、7,它们分别是二进制 101,110 和 111。因此该函数更改了数字 100 的所有最后 2 位以生成所有可能性。

我不知道该怎么做..任何想法都会有很大帮助!

提前致谢

【问题讨论】:

    标签: c++ algorithm binary numbers


    【解决方案1】:

    您的掩码大小可以被认为是生成所有可以使用maskSize 位表示的数字的一种方式。在您的示例中,2 或 2 位具有 22 个可能的值:00 01 10 11 或 0、1、2、3,如果您将其中的每一个添加到 @987654323 @ 为您提供 4、5、6 和 7。

    所以你要做的是计算从 2maskSize 可以达到的所有数字,并将它们添加到 `number' 以填充你的数组。

    【讨论】:

      【解决方案2】:

      这应该可以解决问题 -

      void generateArray(int n, int m) {
          if (m == 0) {
              printf ("%d\n", n);
              return;
          }
          int mask = 1 << (m-1);
          generateArray(n & ~mask, m-1);
          generateArray(n |  mask, m-1);
      }
      

      这段c代码打印出数字,但原理是一样的——只是修改它以将它们累积到你的向量中,并删除初始参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-04
        • 2021-06-23
        • 1970-01-01
        • 2020-01-28
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多