这些按位运算在做什么
本文关键字:什么 运算 | 更新日期: 2023-09-27 18:26:43
uint sum = generateSum();
int forced = getForcedBitfield();
int previousSum = getPreviousSum();
sum = (~forced & sum) + (forced & previousSum);
最后一行到底在做什么?总和为 32 个布尔值。它是一个位域。强制是位域,previousSum 是位域。
用简单的英语来说,最后一行在做什么?(不是操作,我知道它不是强制的,并且用总和将其添加到强制和与以前的总和中(
这将
有选择地从两个值(sum
&previousSum
(中挑选位,其中"on"位来自previousSum
,"off"位来自sum
。
由于加法运算的两个操作数将互斥位设置为 1,因此在这种情况下,加法与布尔 Or 具有相同的效果。
这就像使用模具组合两个图像一样。
要了解其工作原理,让我们使用 4 位值:
两个值强制 = 0011(和 ~强制 = 1100(
上一页总和 = 0110
总和 = 1111
~强制 & 总和 = 1100
强制和上一个总和 = 0010
中都没有位"on",因此求和与OR相同,其效果等于从两个有效值中选择位来构造新值。