问题描述
对于二进制按位运算,我希望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 == a
对and
和or
是正确的,但对xor
,nor
或nand
则不成立,则您的期望有效。
如果您使用简单的计算器https://xor.pw/#并执行Xor,则返回142。请不要忘记xor的意思是:
A | B | R = A Xor B
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0