XOR执行什么数学运算?
答案 0 :(得分:64)
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相同。
答案 1 :(得分:31)
^
Python bitwise XOR operator。这是你在python中拼写XOR
的方式:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
XOR代表exclusive OR。它用于密码学,因为它允许你在可逆操作中使用掩码“翻转”这些位:
>>> 10 ^ 5
15
>>> 15 ^ 5
10
其中5
是掩码; (输入XOR掩码)XOR掩码再次为您输入。
答案 2 :(得分:6)
有关XOR操作的更多信息。
答案 3 :(得分:2)
这里没有提及其他答案的一件事是异或与负数-
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
使用上述功能表您可以轻松了解XOR的工作原理,但并没有说明它如何处理负数。
由于这个问题也被标记为python,因此我会在心中回答它。 XOR(^
)是逻辑运算符,当位不同时将返回1,在其他位置将返回0。
负数以二进制形式存储为 two's complement 。在2的补码中,最左边的位保留用于值的正负符号,对数字的值无贡献。
在Python中,负数用前导号代替前导号 零。因此,如果您只对 two's-complement 使用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
由于XOR运算后,MSB变为0,因此我们得到的结果数为正数。同样,对于所有负数,我们考虑使用 2的补数(最常用的一种)以二进制格式表示,并对它们的二进制表示进行简单的XOR。
下表对于确定结果的符号可能很有用。
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
XOR的基本规则对于负XOR运算也保持相同,但是某天某人对XOR运算如何以负数进行操作会很有用。
答案 4 :(得分:1)
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相加,而没有跟踪进位,而是从AND
获得x和y之间的进位。
x^y // is actually ~xy + ~yx
// Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).
答案 5 :(得分:1)
(^)XOR运算符应用于两个不同的位(0和1)时会生成1。当它应用于两个相同的位(0和0或1和1)时,它将生成0。