Python 位运算符



Python 位运算符

Python 位运算符 通常用于对整数类型对象执行位运算。但是,它不是将对象作为一个整体来处理,而是将其视为一个位字符串。对字符串中的每个位执行不同的操作。

Python 有六个位运算符 - &, |, ^, ~, << 和 >>。所有这些运算符(除了 ~)本质上都是二元的,因为它们作用于两个操作数。每个操作数都是一个二进制数字(位)1 或 0。

以下是 Python 中的位运算符:

  • 按位与运算符
  • 按位或运算符
  • 按位异或运算符
  • 按位非运算符
  • 按位左移运算符
  • 按位右移运算符

Python 按位与运算符 (&)

按位与运算符有点类似于逻辑与运算符。只有当两个位操作数都是 1(即 True)时,它才返回 True。所有组合如下:

0 & 0 is 0
1 & 0 is 0
0 & 1 is 0
1 & 1 is 1

当使用整数作为操作数时,两者都转换为等效的二进制数,& 操作对每个数字的对应位执行,从最低有效位开始,到最高有效位结束。

Python 中按位与运算符的示例

让我们取两个整数 60 和 13,并将它们分别赋值给变量 a 和 b。

a=60
b=13
print ("a:",a, "b:",b, "a&b:",a&b)

这将产生以下输出

a: 60 b: 13 a&b: 12

为了理解 Python 如何执行此操作,请获取每个变量的二进制等效值。

print ("a:", bin(a))
print ("b:", bin(b))

这将产生以下输出

a: 0b111100
b: 0b1101

为了方便起见,对每个数字使用标准的 8 位格式,因此“a”是 00111100,“b”是 00001101。让我们手动对这两个数字的每个对应位执行与操作。

0011 1100
&
0000 1101
-------------
0000 1100

将结果二进制数转换回整数。您将得到 12,这与之前获得的结果相同。

>>> int('00001100',2)
12

Python 按位或运算符 (|)

“|”符号(称为管道)是按位或运算符。如果任何位操作数为 1,则结果为 1,否则为 0。

0 | 0 is 0
0 | 1 is 1
1 | 0 is 1
1 | 1 is 1

Python 中按位或运算符的示例

取相同的值 a=60,b=13。“|”操作的结果为 61。获取它们的二进制等效值。

a=60
b=13
print ("a:",a, "b:",b, "a|b:",a|b)
print ("a:", bin(a))
print ("b:", bin(b))

这将产生以下输出

a: 60 b: 13 a|b: 61
a: 0b111100
b: 0b1101

要手动执行“|”操作,请使用 8 位格式。

0011 1100
    |
0000 1101
-------------
0011 1101

将二进制数转换回整数以核对结果:

>>> int('00111101',2)
61

Python 按位异或运算符 (^)

XOR 代表异或。这意味着对两个位执行或操作的结果为 1,当且仅当其中一个位为 1。

0 ^ 0 is 0
0 ^ 1 is 1
1 ^ 0 is 1
1 ^ 1 is 0

Python 中按位异或运算符的示例

让我们对 a=60 和 b=13 执行异或操作。

a=60
b=13
print ("a:",a, "b:",b, "a^b:",a^b)

这将产生以下输出

a: 60 b: 13 a^b: 49

现在我们手动执行按位异或。

0011 1100
    ^
0000 1101
-------------
0011 0001

int() 函数显示 00110001 为 49。

>>> int('00110001',2)
49

Python 按位非运算符 (~)

此运算符是逻辑非运算符的二进制等效项。它翻转每个位,因此 1 被 0 替换,0 被 1 替换,并返回原始数字的补码。Python 使用 2 的补码方法。对于正整数,它只需通过反转位来获得。对于负数 -x,它使用所有位都被反转(从 1 变为 0 或从 0 变为 1)的 (x-1) 的位模式来编写。因此:(对于 8 位表示)

-1 is complement(1 - 1) = complement(0) = "11111111"
-10 is complement(10 - 1) = complement(9) = complement("00001001") = "11110110".

Python 中按位非运算符的示例

对于 a=60,其补码为:

a=60
print ("a:",a, "~a:", ~a)

这将产生以下输出

a: 60 ~a: -61

Python 按位左移运算符 (<<)

左移运算符将最高有效位向右移动“<<”符号右侧的数字。因此,“x << 2”导致二进制表示的 x 向右移动两位。

Python 中按位左移运算符的示例

让我们对 60 执行左移。

a=60
print ("a:",a, "a<<2:", a<<2)

这将产生以下输出

a: 60 a<<2: 240

这是如何发生的?让我们使用 60 的二进制等效值,并执行左移 2 位。

0011 1100
<<
    2
-------------
1111 0000

将二进制数转换为整数。它是 240。

>>> int('11110000',2)
240

Python 按位右移运算符 (>>)

右移运算符将最低有效位向左移动右侧“>>”符号指定的值。因此,“x >> 2” 会将 x 的二进制表示中的两位向左移动。

Python 中的按位右移运算符示例

让我们对 60 执行右移操作。

a=60
print ("a:",a, "a>>2:", a>>2)

这将产生以下输出

a: 60 a>>2: 15

下面显示了对 60 进行手动右移操作:

   0011 1100
   >>
   2
   -------------
   0000 1111

使用 int() 函数将上述二进制数转换为整数。结果是 15。

>>> int('00001111',2)
15
广告