^ (XOR) 运算符有啥作用? [复制]

Posted

技术标签:

【中文标题】^ (XOR) 运算符有啥作用? [复制]【英文标题】:What does the ^ (XOR) operator do? [duplicate]^ (XOR) 运算符有什么作用? [复制] 【发布时间】:2013-01-09 16:46:26 【问题描述】:

XOR 执行什么数学运算?

【问题讨论】:

XOR 是 逻辑 运算,而不是数学运算。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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 ).

【讨论】:

【参考方案3】:

其他答案在这里没有提到的一件事是 XOR 与负数 -

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

虽然您可以使用上面的函数表轻松理解 XOR 的工作原理,但它并不能说明它在负数上的工作原理。


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 操作将照常对所有位进行。

异或运算:

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


     ∴ -5 ^ -3 = 6

由于异或运算后MSB变为0,所以我们得到的结果是一个正数。类似地,对于所有负数,我们使用2 的补码(最常用的一种)来考虑它们的二进制格式,并对它们的二进制表示进行简单的异或运算。

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

下表可用于确定结果的符号。

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

XOR 的基本规则对于负 XOR 运算也保持不变,但负数运算的真正工作方式可能对某人有用?。

【讨论】:

【参考方案4】:

关于异或运算的更多信息。

XOR 一个数字与自身奇数次的结果是数字 本身。 与自身异或偶数次,结果为0。 此外,与 0 的 XOR 始终是数字本身。

【讨论】:

【参考方案5】:

^ 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(异或,有时也称为 EOR)描述为“A 或 B,但不是两者都或两者都不是”。 谢谢!!!你和另一位受访者肯定已经让我今天保持清醒 --- 我根本想不通,而且它是如此无法通过谷歌搜索。【参考方案6】:

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加法也一样。-这是什么意思? @RajaDorji 解释here

以上是关于^ (XOR) 运算符有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别