繁体   English   中英

这些按位运算在做什么

[英]What are these bitwise operations doing

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相同,其效果等同于从两个有效值中选择位以构造新值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM