^(XOR)运算符有什么作用?

时间:2013-01-25 16:55:36

标签: python math

XOR执行什么数学运算?

6 个答案:

答案 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操作的更多信息。

  • 将一个数字与自身的奇数相除,结果是数字 本身。
  • 与自身进行异或数异或运算,结果为0。
  • 也将数字本身与0进行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位 数字,然后将0000000001111111的模式视为 从0到127的整数,并保留1xxxxxxx来写负数 数字。

牢记这一点,让我们通过一个例子来了解XOR如何对负数进行运算。让我们考虑表达式-( -5 ^ -3 )

  • -5的二进制表示形式可以视为1000...101
  • -3的二进制表示形式可以视为1000...011

在这里,...表示全0,其数量取决于用于表示的位(32位,64位等)。 MSB (最高有效位)处的1表示二进制表示的数字为负。照常对所有位执行XOR操作。

XOR操作:

      -5   :  10000101          |
     ^                          | 
      -3   :  10000011          |  
    ===================         |
    Result :  00000110  =  6    |
________________________________|


     ∴ -5 ^ -3 = 6

由于XOR运算后,MSB变为0,因此我们得到的结果数为正数。同样,对于所有负数,我们考虑使用 2的补数(最常用的一种)以二进制格式表示,并对它们的二进制表示进行简单的XOR。

结果的 MSB位将表示符号,而其余的位将表示最终结果的值

下表对于确定结果的符号可能很有用。

  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。