这些按位运算在做什么

本文关键字:什么 运算 | 更新日期: 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相同,其效果等于从两个有效值中选择位来构造新值。