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


Answers:


131

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相同。


2
谢谢!!我希望我早些时候问过-今天早上差点让自己发疯。谢谢您确保我度过了一个愉快的下午!
希拉里公园公园

伙计,那真的是如此非常简单!我正在通过更多地了解哈希算法而工作,这是其中许多算法中非常恒定的操作。
Mike Perrenoud 2013年

2
它也与加模2相同。-这是什么意思?
Raja Dorji

@RajaDorji在这里
mlynn

51

^ Python的按位异或运算符。这是您XOR在python中拼写的方式:

>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0

XOR代表异或。它用于密码术,因为它使您可以使用掩码在可逆操作中“翻转”位:

>>> 10 ^ 5
15
>>> 15 ^ 5
10

5面具在哪里?(输入XOR掩码)XOR掩码再次为您提供输入。


5
事实表说的是事实-在对话中,我通常将XOR(“异或”,有时也称为EOR)描述为“ A或B,但不是两者或两者都不是”。
八位大师

2
谢谢!!!您和另一位受访者肯定已经挽救了我的理智之举---我简直不敢理and,那太不可Google了。
希拉里公园公园

5

有关XOR操作的更多信息。

  • 将数字与本身的奇数异或,结果是数字本身。
  • 与自身进行异或数异或运算,结果为0。
  • 同样,与0的XOR始终是数字本身。

2

有一两件事,其他的答案不提这里是XOR负数-

 a  |  b  | a ^ b
----|-----|------
 0  |  0  |  0
 0  |  1  |  1
 1  |  0  |  1
 1  |  1  |  0

使用上面的功能表您可以很容易地理解XOR的工作原理,但是并不能说明它如何处理负数。


XOR如何与负数一起使用:

由于此问题也被标记为python,因此我将牢记在心。该XOR( ^)是一个逻辑运算符,将返回1,当位是不同的,并且在其他地方0。

负数以二进制补码形式存储在二进制中。以2的补数表示,最左边的位保留用于值的符号(正或负),并且不影响数字的值。

Python中,负数用前导1而不是前导0编写。所以,如果你使用的是只有8位二进制补码 数,那么你从治疗模式00000000,以01111111作为整个数字从0到127,和储备1xxxxxxx写负数。

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

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

在这里,...表示全0,其数量取决于表示所用的位​​(32位,64位等)。所述1MSB(最高有效位)表示由二进制表示所表示的数是负的。异或运算将照常在所有位上完成。

异或运算:

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


     ∴ -5 ^ -3 = 6

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

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

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

  a   |   b   | a ^ b
------|-------|------
  +   |   +   |   +
  +   |   -   |   -
  -   |   +   |   -
  -   |   -   |   +

对于负XOR运算,XOR的基本规则也保持不变,但是某天某人对XOR运算如何真正以负数进行工作可能会有所帮助。


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

您会注意到,XORx的结果是与y相加的,而无需跟踪进位,而是从ANDx和y之间获得进位。

x^y // is actually ~xy + ~yx
    // Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).

1

当将(^)XOR运算符应用于两个不同的位(0和1)时,它会生成1。当它应用于两个相同的位(0和0或1和1)时,它将生成0。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.