9.2 KiB
Python 按位运算符
原文:https://www.pythonforbeginners.com/basics/python-bitwise-operators
Python 中有各种类型的运算符,如算术运算符、比较运算符和位运算符。在我们的程序中,我们使用这些操作符来控制执行顺序和操作数据。在本文中,我们将研究不同的 python 位操作符,它们的功能和例子。
什么是按位运算符?
通常,我们在程序中使用算术运算符对数字的十进制值进行计算。但是,我们也可以对二进制形式的数字进行运算。为此,我们使用按位运算符。正如您可以从名称中预测的那样,按位运算符一点一点地处理数据。当我们对十进制形式的数字执行任何位运算时,这些数字被转换成二进制数,然后执行位运算。此外,位运算只能在可能是正数或负数的整数上执行。
以下是 Python 中的按位运算符表。
| 操作 | 操作员 | | 和 | & | | 运筹学 | | | | 不 | ~ | | 异或运算 | ^ |
Python Bitwise Operators
为了理解按位运算符的工作原理,我建议您理解十进制数到二进制数的转换。在本文中,我们将使用两个整数 8 和 14 来执行位运算。
8 以二进制形式表示为 1000 ,而 14 以二进制形式表示为 1110 。在 python 中,二进制数由 0 和 1 的序列表示,前面是“0b”。我们可以很容易地使用 bin()函数将十进制数转换成二进制数,如下所示。
myNum1 = 8
binNum1 = bin(myNum1)
myNum2 = 14
binNum2 = bin(myNum2)
print("Binary of {} is {}.".format(myNum1, binNum1))
print("Binary of {} is {}.".format(myNum2, binNum2))
输出:
Binary of 8 is 0b1000.
Binary of 14 is 0b1110.
Python 中的按位 AND
按位 AND 是二元按位运算符。换句话说,按位 AND 运算符对两个操作数的位表示进行运算。在按位 AND 运算中,如果两个操作数都为 1,则输出位为 1。否则,输出位为 0。按位 AND 运算符的工作可以总结为以下规则。
- 0 和 0 = 0
- 0 和 1 = 0
- 1 和 0 = 0
- 1 和 1 = 1
让我们用下面的例子来理解这一点。假设我们必须对 8 和 14 执行按位 AND 运算。我们首先将它转换成二进制格式。
- 二进制格式的 8 写成 1000。
- 二进制格式的 14 写成 1110。
为了对这两个数执行按位 AND 运算,我们将从最右边的位开始对这两个数的位逐一执行按位 AND 运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。由于 8 和 14 都有四位,我们将逐一对所有位执行按位 and 运算。
- 对两个数的第一位进行按位 AND 运算。
0 和 0 =0
- 两个数的第二位的按位 AND。
0 和 1=0
- 两个数的第三位的按位 AND。
0 和 1=0
- 两个数的第四位的按位 AND。
1 和 1=1
因此,在输出中,第一位是 0,第二位是 0,第三位是 0,第四位是 1。即二进制格式的输出将是 1000,这将是整数格式的数字 8。我们可以使用下面的程序在 python 中使用 AND 运算符来验证这个输出。
myNum1 = 8
myNum2 = 14
andNum = myNum1 & myNum2
print("Operand 1 is:", myNum1)
print("operand 2 is:", myNum2)
print("Result of the AND operation on {} and {} is {}.".format(myNum1, myNum2, andNum))
输出:
Operand 1 is: 8
operand 2 is: 14
Result of the AND operation on 8 and 14 is 8.
Python 中的按位 OR
按位 OR 是二元按位运算符。换句话说,按位 OR 运算符对两个操作数的位表示进行运算。在按位“或”运算中,如果任一操作数为 1,则输出位为 1。否则,输出位为 0。按位“或”运算符的工作可以总结为以下规则。
- 0 或 0 = 0
- 0 或 1 = 1
- 1 或 0 = 1
- 1 或 1 = 1
让我们用下面的例子来理解这一点。
假设我们必须对 8 和 14 执行按位“或”运算。我们首先将它转换成二进制格式。
- 二进制格式的 8 写成 1000。
- 二进制格式的 14 写成 1110。
为了对这两个数执行按位“或”运算,我们将从最右边的位开始,对这两个数的位逐一执行按位“或”运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。
由于 8 和 14 都有四位,我们将逐一对所有位执行按位“或”运算。
- 两个数的第一位按位或。
0 或 0 =0
- 两个数的第二位的按位“或”。
0 或 1=1
- 两个数的第三位的按位“或”。
0 或 1=1
- 两个数的第四位的按位“或”。
1 或 1=1
因此,在输出中,第一位是 0,第二位是 1,第三位是 1,第四位是 1。即二进制格式的输出将是 1110,这将是整数格式的数字 14。我们可以使用下面的程序在 python 中使用 OR 运算符来验证这个输出。
myNum1 = 8
myNum2 = 14
orNum = myNum1 | myNum2
print("Operand 1 is:", myNum1)
print("operand 2 is:", myNum2)
print("Result of the OR operation on {} and {} is {}.".format(myNum1, myNum2, orNum))
输出:
Operand 1 is: 8
operand 2 is: 14
Result of the OR operation on 8 and 14 is 14.
Python 中的按位 NOT
按位 NOT 是一元按位运算符。换句话说,按位 NOT 运算符对其位表示中的一个操作数起作用。在按位非运算中,如果输入位为 0,则输出位为 1,如果输入位为 1,则输出为 0。按位 NOT 运算符的工作可以总结为以下规则。
- 不是 0 = 1
- 不是 1= 0
让我们用下面的例子来理解这一点。
假设我们必须对 14 执行按位非运算。我们首先将它转换成二进制格式。
- 二进制格式的 14 写成 1110。
要对 14 执行按位非运算,我们将从最右边的位开始,对数字的每个位逐一执行按位非运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。
由于 14 中有四位,我们将对所有位逐一执行按位非运算。
- 第一位的按位非。
不是 0 = 1。
- 第二位的按位非。
不是 1 = 0。
- 第三位的按位非。
不是 1 = 0。
- 第四位的按位非。
不是 1 = 0。
因此,在输出中,第一位是 1,第二位是 0,第三位是 0,第四位是 0。即二进制格式的输出将是 0001,这将是整数格式的数字 1。
myNum1 = 14
notNum = ~myNum1
print("Operand 1 is:", myNum1)
print("Result of the NOT operation on {} is {}.".format(myNum1, notNum))
输出:
Operand 1 is: 14
Result of the NOT operation on 14 is -15.
等等,NOT 运算的输出是-15。但是,根据我们的理论应该是 1。哪里出问题了?
哪儿也不去。NOT 是一个按位求逆运算符,x 的按位求逆在 Python 中定义为-(x+1)。这里 x 是输入的数字。我将在接下来的章节中更多地讨论一个人的补充。
Python 中的 XOR
按位异或是一种二进制按位运算符。换句话说,按位 XOR 运算符对两个操作数的位表示进行运算。在按位异或运算中,如果两位相同,结果将为 0,否则,结果将为 1。
我们可以用 AND、OR 和 NOT 运算符来写 XOR,如下所示。
a XOR b = (b 与(非 a))或(a 与(非 b))
按位 XOR 运算符的工作可以总结为以下规则。
- 1 异或 0 = 1
- 1 异或 1 = 0
- 0 异或 0 = 0
- 1 异或 0 = 1
让我们用下面的例子来理解这一点。
假设我们必须对 8 和 14 执行按位异或运算。我们首先将它转换成二进制格式。
- 二进制格式的 8 写成 1000。
- 二进制格式的 14 写成 1110。
为了对这两个数执行按位 XOR 运算,我们将从最右边的位开始对这两个数的位逐一执行按位 XOR 运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。
由于 8 和 14 都有四位,我们将逐一对所有位执行按位异或运算。
- 两个数的第一位按位异或。
0 异或 0 =0
- 两个数字的第二位按位异或。
0 或 1=1
- 两个数的第三位按位异或。
- 0 或 1=1
- 两个数字的第四位按位异或。
1 或 1=0
因此,在输出中,第一位是 0,第二位是 1,第三位是 1,第四位是 0。即二进制格式的输出将是 0110,这将是整数格式的数字 6。我们可以使用下面的程序在 python 中使用 XOR 运算符来验证这个输出。
myNum1 = 8
myNum2 = 14
xorNum = myNum1 ^ myNum2
print("Operand 1 is:", myNum1)
print("operand 2 is:", myNum2)
print("Result of the XOR operation on {} and {} is {}.".format(myNum1, myNum2, xorNum))
输出:
Operand 1 is: 8
operand 2 is: 14
Result of the XOR operation on 8 and 14 is 6.
结论
在本文中,我们讨论了 python 按位运算符、它们的语法和例子。要了解更多关于 python 编程的知识,你可以阅读这篇关于列表理解的文章。你可能也会喜欢这篇关于 Python 中链表的文章。