二进制按位X-OR操作一次返回多个X-OR操作的意外答案

问题描述

对于二进制按位运算,我希望13<op>31<op>131等于(13<op>31) <op> (31<op>131)。这适用于按位AND运算,但不适用于按位X-OR运算。

在按位与运算中,我得到了预期的答案:

>>> 13&31&131
1
>>> 13&31
13
>>> 31&131
3
>>> 13&3
1

但是在按位X-OR操作中,我没有得到预期的结果:

>>> 13^31^131
145
>>> 13^31
18
>>> 31^131
156
>>> 18^156
142    <<--- I expect this to be 145

我想不通我缺少什么概念。有人可以帮我吗?

解决方法

您期望的最后一个表达式为145应该是18 ^ 131 ...它是145。第二个运算符不应包含156,因为这意味着您要对中间的31进行两次运算

,
(13 xor 31) xor (31 xor 131)

不相等

13 xor 31 xor 131

相反,它与

相同
13 xor 131

如果a op a == aandor是正确的,但对xornornand则不成立,则您的期望有效。

,

如果您使用简单的计算器https://xor.pw/#并执行Xor,则返回142。请不要忘记xor的意思是:

A | B | R = A Xor B
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0