这个方程如何 x + y = x & y + x | y 成立(假设 x, y > 0)?

Nav*_*mar 3 c++ bit bitset

我最近参加了一个代码力量竞赛。在比赛的编辑部分,我看到了按位运算符之间的一种美妙关系,即 x + y = x & y + x | 是的 我还不知道证明。我拿了几个数字来看看这个等式是否正确。我很高兴知道这个证明。我在网上查了一下,没有找到任何有意义的参考资料。请帮我找到证据,或者至少给我这个美丽等式背后的直觉。提前致谢

Hol*_*Cat 5

假设你正在做a + b

请注意,将 的第 i 位(从最右边的数字开始计数)a与第 i 位的交换b不会影响总和。例子:123 + 456 == 156 + 423。无论基数的选择如何,这都有效,因此它也适用于二进制加法。

接下来,请注意可以通过以上述方式(二进制)交换一些数字来完成从a + b到的转换a&b + a|b。如果a[i] == 1b[i] == 0,则交换a[i]b[i];之后,a变成a&bb变成a|b。因此这种转变不会影响结果。