uint sum = generateSum();
int forced = getForcedBitfield();
int previousSum = getPreviousSum();
sum = (~forced & sum) + (forced & previousSum);
最后一行究竟在做什么?总和是32个布尔值。这是一个位域。 Forced是一个bitfield而previousSum是一个bitfield。
简单的英语最后一行在做什么? (不是操作,我知道它不是强迫的,并且用它来和它然后把这个加到前面的总和强迫anded)
答案 0 :(得分:4)
这将有选择地从两个值(sum
& previousSum
)中选择位,其中" on"位来自previousSum
和" off"位来自sum
。
因为加法运算的两个操作数将互斥位设置为1,所以在这种情况下,加法与布尔或具有相同的效果。
就像使用模板组合两张图片一样。
要了解其工作原理,请使用4位值:
强制= 0011(和〜强制= 1100)
previousSum = 0110
sum = 1111
〜强迫& sum = 1100
强迫与previousSum = 0010
"" on"在两个值中,因此求和与OR相同,并且效果等于从两个有效位中选择位来构造新值。