获取二进制的所有可能变体 - 给定模式

Dr.*_*eon 0 c c++ 64-bit combinations bit-manipulation

好吧,我正在尝试做的可能听起来有点复杂,但我仍然无法弄清楚:

  • 假设我们有一个unsigned long long64位整数
  • 我想设置一些"可变"位位置并获得所有可能的派生数字

例如

Pattern = 00000000XXXXX000XX000X 
Positions = 0,4,5,9,10,11,12,13

Result (Pattern, Positions) = {
    0000000000000000000000
    0000000000000000000001
    0000000000000000010000
    0000000000000000010001
    0000000000000000100000
    0000000000000000100001
    0000000000000000110000
    0000000000000000110001
    etc...
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?有任何想法吗?

ric*_*ici 5

他们太容易了.

对要保持不变的位位置进行掩码.在每次迭代时:

x |= mask;
++x;
x &= ~mask;
Run Code Online (Sandbox Code Playgroud)