这些按位操作是做什么的

时间:2015-12-14 20:44:57

标签: c# bit-manipulation

uint sum = generateSum();
int forced = getForcedBitfield();
int previousSum = getPreviousSum();

sum = (~forced & sum) + (forced & previousSum);

最后一行究竟在做什么?总和是32个布尔值。这是一个位域。 Forced是一个bitfield而previousSum是一个bitfield。

简单的英语最后一行在做什么? (不是操作,我知道它不是强迫的,并且用它来和它然后把这个加到前面的总和强迫anded)

1 个答案:

答案 0 :(得分:4)

这将有选择地从两个值(sum& previousSum)中选择位,其中" on"位来自previousSum和" off"位来自sum

因为加法运算的两个操作数将互斥位设置为1,所以在这种情况下,加法与布尔或具有相同的效果。

就像使用模板组合两张图片一样。

要了解其工作原理,请使用4位值:

  

强制= 0011(和〜强制= 1100)
  previousSum = 0110
  sum = 1111
  〜强迫& sum = 1100
  强迫与previousSum = 0010

"" on"在两个值中,因此求和与OR相同,并且效果等于从两个有效位中选择位来构造新值。