【问题标题】: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代码打印出数字,但原理是一样的——只是修改它以将它们累积到你的向量中,并删除初始参数。