Python按位异或运算符
二进制语言是计算机的语言。计算机的所有内部机制都是基于位来进行的。按位运算符是一组运算符,允许程序员对整数执行按位操作。这些运算符允许程序员操作计算机中的低级数据。Python中总共有六个按位运算符:
- 按位与
- 按位或
- 按位非
- 按位异或
- 按位右移
- 按位左移
本文讨论了带有示例的按位异或运算符。
- 当我们对两个操作数应用按位运算符时,整数值会被转换为二进制形式,即位。
- 然后,运算符在每个单独的位上逐位执行操作。
- 操作完成后,将二进制数转换为十进制形式,并将其作为输出返回。
现在,让我们了解按位异或运算的操作:
-
它被称为“异或”。它从“或”条件中排除了1 | 1 -> 1的情况。
- 它是一个二进制运算符,作用于两个操作数之间。
- 表示:a ^ b ,其中’a’和’b’是两个操作数。
-
返回值: 当在两个整数之间执行时,返回一个整数;当在两个布尔值之间执行时,返回一个布尔值。
操作:
- 给定的两个整数被转换为二进制形式。
- 在这两个二进制符号中:
- 如果两个相应的位相同 – (1 ^ 1), (0 ^ 0),返回0。
-
如果两个相应的位不同 – (1 ^ 0), (0 ^ 1),返回1。
- 在对所有位执行异或操作后,将得到的二进制数转换回十进制并返回。
异或的真值表:
Bit 1 (operand 1) | Bit 2 (operand 2) | Return value |
---|---|---|
1 | 1 | 0 |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
让我们使用一个示例来理解这个概念:
如果我们想要执行:
3 ^ 4:
1. 两个整数都被转换为二进制形式:
3 -> 0 1 1
4 -> 1 0 0
2. 现在,按位应用异或运算:
3. 最后,结果二进制数再转换回十进制形式。
1 1 1 表示 7
4. 输出 -> 7
3 ^ 4 – > 7
现在,对于相同的操作数,让我们写一个用于异或的代码:
a = int (input ("Enter the value of a: "))
b = int (input ("Enter the value of b: "))
print ("Bitwise xor: ", a ^ b)
输出:
关于布尔值
我们可以对布尔值进行xor运算。当我们对两个整数进行操作时,1等同于布尔值True,0等同于布尔值False。
真值表:
Operand 1 | Operand 2 | Operand 1 ^ Operand 2 |
---|---|---|
True | True | False |
False | False | False |
True | False | True |
False | True | True |
a = True
b = False
c = True
d = False
print ("True ^ True :", a ^ c)
print ("True ^ False:", a ^ b)
print ("False ^ True :", b ^ a)
print ("False ^ False:", b ^ d)
输出:
输出的结构:
- 如果我们对a和b执行异或操作 -> a^b。结果是得到某个整数c **(a^b – > c) ** 那么,
- 如果我们对c和a执行异或操作,得到的输出将是b -> **c^a – > b **
- 如果我们对c和b执行异或操作,得到的输出将是a -> **c^b – > a **
让我们来看上面的示例:
代码:
a = int (input ("Enter the value of a: "))
b = int (input ("Enter the value of b: "))
c = a ^ b
print ("a ^ b -> ", a, "^", b, "=", c)
print ("c ^ a -> ", c, "^", a, "=", c ^ a)
print ("c ^ b -> ", c, "^", b, "=", c ^ b)
输出:
理解:
如果 a ^ b -> c
那么,
c ^ a -> b
c ^ b -> a
- 如果我们知道输出和一个操作数,我们可以使用这个关系找到另一个操作数。
- 这个关系只有在异或运算中才可能存在,因为它的真值表如此。
xor在密码学中的作用
上述关系在密码学模型中起到了异或一个小角色。
- 如果一个人’A’想要将一个数字编码的消息机密地发送给另一个人’B’,他需要一个简单的掩码来隐藏编码的消息。
- A和B之间事先知道彼此的秘密密钥。
- 现在,A将消息与秘密密钥进行异或,并将其发送给B。
- 收到后,B可以再次使用接收到的异或结果和秘密密钥进行异或运算,从而获得消息。
示例:
A想要将消息3发送给B,他们的秘密密钥是4
3 ^ 4 -> 5。
A将5发送给B。
B已经知道秘密密钥是4。
他将再次使用异或解密消息:
5 ^ 4 -> 3
消息成功接收。
- 该方法是最简单的,因此也是最弱的加密方法。