我对A XOR B
操作的了解是A != B
输出为1,A == B
为0。但是,当A和B不是二进制时,我对此操作没有任何见解。
例如,如果A = 1
,B = 3
,则A XOR B = 2
;另外,如果A = 2
,B = 3
,则A XOR B = 1
。对于非二进制值,XOR操作是否有任何模式?
我对布尔数学有很好的理解,所以我已经理解了XOR的工作原理。我要问的是,例如,如果A和B不是二进制数,你如何在不经过人工计算的情况下预测A XOR B的结果?让我们假设2 XOR 3 = 1不仅仅是一个数学假象。
谢谢!
答案 0 :(得分:2)
只需查看数字的二进制表示,并对每个位执行以下规则:
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
所以,1 XOR 3
是:
1 = 001
3 = 011
XOR = 010 = 2
要将(十进制)数字转换为二进制,重复除以2直到达到0,然后以相反顺序的余数为二进制数:
要将其转换回来,重复用2的最大幂除去它,直到达到0,使得二进制数中的每个位置对应于你减去的幂,设置为1(最左边) position对应于0次幂:
(Images reference)功能
答案 1 :(得分:1)
xor
只是各个位的xor
:
A: 0|0|0|1 = 1
B: 0|0|1|1 = 3
=======
A^B: 0|0|1|0 = 2
^-- Each column is a single bit xor
答案 2 :(得分:1)
当对多于一位的数字使用位操作时,它只对输入中的每个相应位执行操作,并成为输出中的相应位。所以:
A = 1 = 00000001
B = 3 = 00000011
--------
result= 00000010 = 2
A = 2 = 00000010
B = 3 = 00000011
--------
result= 00000001 = 1
只要输入位相同,结果就会有一个0
位,只要它们不同,就会有一个1
位。
在整数上执行AND
和OR
时使用相同的方法。