我正在学习位掩码。发现和示例,但无法使其工作。如何使用位掩码运算符
我想从一个数组中计算所有总和组合。 结果应该是
0 - 1 - 2 - 3 - 3 - 4 - 5 - 6
我的问题是与(i &掩模)应该只导致{0,1}并不是。 反而在生产。
0 - 1 - 4 - 5 - 12 - 13 - 16 - 17
int[] elem = new int[] { 1, 2, 3 };
double maxElem = Math.Pow(2, elem.Length);
for (int i = 0; i < maxElem; first++)
{
int mask = 1, sum = 0;
for (int run = 0; run < elem.Length; run++)
{
sum += elem[run] * (i & mask);
mask <<= 1;
}
Debug.Write(sum + " - ");
}
'i&mask'将产生0或'mask',而不是0或1:例如。 '0110b&0100b == 0100b'和'1010b&0100b == 0000b' – Blorgbeard
在你的情况下'mask'是2 ^'run',这意味着只设置一个位 - 不是它是1或0 – BrokenGlass
@Blorgbeard I对于所有组合,想要总和{0,1} elem [0] + {0,1} elem [1] + {0,1} elem [2]。我认为{0,1}的变化可以通过位掩码序列来解决。 –