XOR执行什么数学运算?
XOR是一种二进制运算,代表“异或”,即如果只有 一个 位被设置,则结果位将评估为1。
这是它的函数表:
a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
这个操作是在一个数字的每两个对应的二进制位之间执行的。
例如:7 ^ 10
二进制形式:0111 ^ 1010
0111
^ 1010
======
1101 = 13
属性:该操作是可交换的,可结合的和自反的。
它也相当于模2加法。
^
是 Python 按位异或运算符。在 Python 中,它就是表示 XOR
的方法:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
XOR代表异或。在密码学中使用它是因为它允许您使用掩码“翻转”位以进行可逆操作:
>>> 10 ^ 5
15
>>> 15 ^ 5
10
其中5
是掩码;(输入 XOR 掩码) XOR 掩码可以让你再次得到输入。
有关异或操作的一些额外信息。
其他答案没有提到的一件事是负数与异或 -
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
由于此问题也标记为Python,我将考虑这一点来回答。 XOR (^
)是一个逻辑运算符,当比特位不同时返回1,在其他情况下返回0。
负数以二进制补码 形式存储。在2的补码中,最左边的位位置保留用于表示值的符号(正或负),并且不对数字的值做出贡献。
在Python中,负数使用前导1而不是前导零进行编写。因此,如果您仅使用8位来表示二进制补码数字,则将模式从
00000000
到01111111
视为从0到127的整数,并保留1xxxxxxx
用于编写负数。
考虑到这一点,让我们通过一个例子了解XOR如何处理负数。我们考虑表达式 - ( -5 ^ -3 )
。
-5
的二进制表示可以看作是1000...101
-3
的二进制表示可以看作是1000...011
这里,...
代表所有的0,其数量取决于用于表示的位数(32位、64位等)。在二进制表示中,MSB(最高有效位)上的1
表示该数字为负数。与往常一样,XOR操作将在所有位上进行。
-5 : 10000101 |
^ |
-3 : 10000011 |
=================== |
Result : 00000110 = 6 |
________________________________|
∴ -5 ^ -3 = 6
由于在异或操作后MSB变为0,因此我们得到的结果是一个正数。同样地,对于所有负数,我们使用二进制补码(最常用的之一)表示它们的表示形式,并在其二进制表示上进行简单的异或运算。
以下表格可用于确定结果的符号。
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
XOR
的另一个应用是电路中,它用于对位进行求和。
当您查看真值表时:
x | y | x^y
---|---|-----
0 | 0 | 0 // 0 plus 0 = 0
0 | 1 | 1 // 0 plus 1 = 1
1 | 0 | 1 // 1 plus 0 = 1
1 | 1 | 0 // 1 plus 1 = 0 ; binary math with 1 bit
XOR
的结果是x和y相加,不考虑进位,进位是由x和y之间的AND
得到的。x^y // is actually ~xy + ~yx
// Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).
(^)异或运算符在两个不同的位(0和1)上应用时生成1。当它在两个相同的位(0和0或1和1)上应用时,它生成0。