我正在學習位掩碼。發現和示例,但無法使其工作。如何使用位掩碼運算符
我想從一個數組中計算所有總和組合。 結果應該是
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}的變化可以通過位掩碼序列來解決。 –