好吧,我正在尝试做的事情可能听起来有点复杂,但我仍然无法理解:
unsigned long long
64位整数E.g。
Pattern = 00000000XXXXX000XX000X
Positions = 0,4,5,9,10,11,12,13
Result (Pattern, Positions) = {
0000000000000000000000
0000000000000000000001
0000000000000000010000
0000000000000000010001
0000000000000000100000
0000000000000000100001
0000000000000000110000
0000000000000000110001
etc...
}
我应该怎么做?有什么想法吗?
答案 0 :(得分:5)
他们太容易了。
制作要保持不变的位位置的掩码。在每次迭代中:
x |= mask;
++x;
x &= ~mask;
答案 1 :(得分:2)
n “变量”位位置在 n 位变量中计数。对于通过位位置的每个位模式循环,将计数器位位置映射到相应的“可变”位位置,在std::bitset
中设置该位值。如果你更喜欢那么可以换位。
答案 2 :(得分:1)
#include <bitset>
#include <iostream>
int positions[] = { 0, 4, 5, 9, 10, 11, 12, 13 };
int main(int argc, char **argv)
{
int length = sizeof(positions) / sizeof(*positions);
/* There are 2^length possible combinations */
for (unsigned long long i = 0; i < 1 << length; i++) {
unsigned long long pattern = 0;
for (unsigned long long j = i, k = 0; j != 0; j >>= 1, k++) {
if (j & 1)
pattern |= 1ULL << positions[k];
}
std::cout << std::bitset<64>(pattern) << std::endl;
}
}