geekdoc-python-zh/docs/py4b/python-bitwise-operators.md

9.2 KiB
Raw Permalink Blame History

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 运算符的工作可以总结为以下规则。

  1. 0 0 = 0
  2. 0 1 = 0
  3. 1 0 = 0
  4. 1 1 = 1

让我们用下面的例子来理解这一点。假设我们必须对 8 和 14 执行按位 AND 运算。我们首先将它转换成二进制格式。

  • 二进制格式的 8 写成 1000。
  • 二进制格式的 14 写成 1110。

为了对这两个数执行按位 AND 运算,我们将从最右边的位开始对这两个数的位逐一执行按位 AND 运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。由于 8 和 14 都有四位,我们将逐一对所有位执行按位 and 运算。

  1. 对两个数的第一位进行按位 AND 运算。

0 和 0 =0

  1. 两个数的第二位的按位 AND。

0 和 1=0

  1. 两个数的第三位的按位 AND。

0 和 1=0

  1. 两个数的第四位的按位 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。按位“或”运算符的工作可以总结为以下规则。

  1. 0 或 0 = 0
  2. 0 或 1 = 1
  3. 1 或 0 = 1
  4. 1 或 1 = 1

让我们用下面的例子来理解这一点。

假设我们必须对 8 和 14 执行按位“或”运算。我们首先将它转换成二进制格式。

  • 二进制格式的 8 写成 1000。
  • 二进制格式的 14 写成 1110。

为了对这两个数执行按位“或”运算,我们将从最右边的位开始,对这两个数的位逐一执行按位“或”运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。

由于 8 和 14 都有四位,我们将逐一对所有位执行按位“或”运算。

  1. 两个数的第一位按位或。

0 或 0 =0

  1. 两个数的第二位的按位“或”。

0 或 1=1

  1. 两个数的第三位的按位“或”。

0 或 1=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 运算符的工作可以总结为以下规则。

  1. 不是 0 = 1
  2. 不是 1= 0

让我们用下面的例子来理解这一点。

假设我们必须对 14 执行按位非运算。我们首先将它转换成二进制格式。

  • 二进制格式的 14 写成 1110。

要对 14 执行按位非运算,我们将从最右边的位开始,对数字的每个位逐一执行按位非运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。

由于 14 中有四位,我们将对所有位逐一执行按位非运算。

  1. 第一位的按位非。

不是 0 = 1。

  1. 第二位的按位非。

不是 1 = 0。

  1. 第三位的按位非。

不是 1 = 0。

  1. 第四位的按位非。

不是 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. 1 异或 0 = 1
  2. 1 异或 1 = 0
  3. 0 异或 0 = 0
  4. 1 异或 0 = 1

让我们用下面的例子来理解这一点。

假设我们必须对 8 和 14 执行按位异或运算。我们首先将它转换成二进制格式。

  • 二进制格式的 8 写成 1000。
  • 二进制格式的 14 写成 1110。

为了对这两个数执行按位 XOR 运算,我们将从最右边的位开始对这两个数的位逐一执行按位 XOR 运算。我们将最右边的位称为第一位,第二个最右边的位称为第二位,第三个最右边的位称为第三位,依此类推。

由于 8 和 14 都有四位,我们将逐一对所有位执行按位异或运算。

  1. 两个数的第一位按位异或。

0 异或 0 =0

  1. 两个数字的第二位按位异或。

0 或 1=1

  1. 两个数的第三位按位异或。
    1. 0 或 1=1
  2. 两个数字的第四位按位异或。

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 中链表的文章。