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

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


最后一行到底在做什么?总和为32个布尔值。这是一个位域。强制是位字段,而presumSum是位字段。

用简单的英语来说,最后一行在做什么? (不是操作,我知道它不是强制的,并且与和相加,然后将其与先前的总和相加)

最佳答案

这将从两个值(sumpreviousSum)中有选择地选择位,其中“ on”位来自previousSum,“ off”位来自sum

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

就像使用模具将两个图像组合在一起。

要查看其工作原理,让我们使用4位值:


  强制= 0011(〜强制= 1100)
  previousSum = 0110
  总和= 1111
  〜强制&之和= 1100
  强制&以前的总和= 0010


两个值中没有位处于“ on”状态,因此求和与OR相同,其效果等同于从两个有效值中选择位以构造新值。

10-07 12:55