从C ++中的数字和掩码位生成数字数组

时间:2013-11-19 21:09:35

标签: c++ algorithm binary numbers

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

vector generateArray(int number, int maskSize)

如果我以这种方式调用此函数:

generateArray(4,2)

4等于100二进制,

它会返回一个带有这些数字的向量:5,6,7,它们是二进制101,110和111.所以函数改变了数字100的所有2个最后一位,以产生所有可能性。

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

提前致谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这应该可以解决问题 -

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代码打印出数字,但原理是相同的 - 只需修改它以在向量中累积它们,并删除初始参数。