pha*_*t0m 85
XOR是二进制运算,它代表"异或",也就是说,如果只设置了其中一个位,则结果位的计算结果为1 .
这是它的功能表:
a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Run Code Online (Sandbox Code Playgroud)
该操作在数字的每两个相应位之间执行.
示例:7 ^ 10
二进制:0111 ^ 1010
0111
^ 1010
======
1101 = 13
Run Code Online (Sandbox Code Playgroud)
属性:操作是可交换的,关联的和自反的.
它也与加法模2相同.
Mar*_*ers 39
^
是的Python的按位异或运算符.这是你XOR
在python中拼写的方式:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
Run Code Online (Sandbox Code Playgroud)
XOR代表异或.它用于密码学,因为它允许你在可逆操作中使用掩码"翻转"这些位:
>>> 10 ^ 5
15
>>> 15 ^ 5
10
Run Code Online (Sandbox Code Playgroud)
5
面具在哪里; (输入XOR掩码)XOR掩码再次为您输入.
其他答案在这里没有提到的一件事是与负数异或-
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Run Code Online (Sandbox Code Playgroud)
虽然您可以使用上面的函数表轻松理解 XOR 的工作方式,但它并没有说明它将如何处理负数。
由于这个问题也被标记为 python,我将考虑到这一点来回答它。该XOR( ^
)是一个逻辑运算符,将返回1,当位是不同的,并且在其他地方0。
负数以二进制形式存储为二进制补码。在 2 的补码中,最左边的位位置保留用于值的符号(正或负),并且对 number 的值没有贡献。
在Python 中,负数用前导一而不是前导零书写。因此,如果您仅使用 8 位作为二进制补 码,那么您将模式从
00000000
到01111111
视为从 0 到 127 的整数,并保留1xxxxxxx
用于写入负数。
考虑到这一点,让我们通过一个例子来理解 XOR 如何处理负数。让我们考虑表达式 - ( -5 ^ -3 )
。
-5
可以被认为是1000...101
与-3
可以被认为是1000...011
。这里,...
表示全 0,其数量取决于用于表示的位(32 位、64 位等)。所述1
在MSB(最高有效位)表示由二进制表示所表示的数是负的。XOR 操作将像往常一样对所有位进行。
-5 : 10000101 |
^ |
-3 : 10000011 |
=================== |
Result : 00000110 = 6 |
________________________________|
? -5 ^ -3 = 6
Run Code Online (Sandbox Code Playgroud)
由于 XOR 运算后 MSB 变为 0,所以我们得到的结果数是一个正数。类似地,对于所有负数,我们考虑使用2 的补码(最常用的一种)以二进制格式表示它们,并对它们的二进制表示进行简单的 XOR。
下表可用于确定结果的符号。
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
Run Code Online (Sandbox Code Playgroud)
XOR 的基本规则对于负 XOR 运算也保持不变,但该运算在负数中的实际工作方式可能对某人有用。
归档时间: |
|
查看次数: |
110580 次 |
最近记录: |