【发布时间】:2020-07-02 21:07:59
【问题描述】:
(a&b)^(a|b) 我怎么能这么简单,如果您可以添加任何学习简化的参考,那就更好了
【问题讨论】:
标签: bitmap bit-manipulation bitwise-operators bitmask bitwise-and
(a&b)^(a|b) 我怎么能这么简单,如果您可以添加任何学习简化的参考,那就更好了
【问题讨论】:
标签: bitmap bit-manipulation bitwise-operators bitmask bitwise-and
(a&b)^(a|b) == a^b
所以它变得非常简单。
为什么?我们只看一位,因为所有位都是独立的。原始表达式的真值表是:
a b a&b a|b ^
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
这与a ^ b 的真值表相同。
另一种看待它的方式,也可以在真值表中看到,对于 XOR,我们可以根据需要交换左右操作数。我们可以独立地为每一位做到这一点。假设我们从a ^ b 开始,那么如果需要,我们可以安排操作数,以便将尽可能多的零交换到左侧操作数中,并将尽可能多的零交换到右侧操作数中。对于 00 和 11 没有任何改变,但我们将 10 更改为 01。我们怎么能这样做?通过将a & b 作为左操作数,将a | b 作为右操作数,然后返回到原来的表达式。
【讨论】: