如何将这个位掩码合并导出到作者建议的内容?

时间:2015-03-20 21:13:57

标签: bitmask

来自以下肖恩安德森的页面: http://graphics.stanford.edu/~seander/bithacks.html#MaskedMerge

他说[(&〜mask)|的结果(b& mask)] 可以写成[a ^((a ^ b)& mask); ]

从问题陈述中,直观地做[(a&〜mask)| (b& mask)]。但是我如何从第一个表达式中导出后面的表达式呢?有线索吗?

1 个答案:

答案 0 :(得分:1)

直观地,& bits表示“取这些位”,^ bits表示“翻转这些位”。

原始表达式(a & ~mask) | (b & mask)表示“从掩码选择的b中获取位,并从a”中取出其余位。

让我们从(b & mask)开始 - 掩码选择的b位。

a ^ (b & mask)会翻转一些内容 - 即a的1位。这几乎是正确的。但是,我们实际上并不想翻转由掩码选择的a的1位。要更正amask均为1的位置中的这些位,我们再次翻转它们:a ^ ((a ^ b) & mask)

相关问题