Python位运算符通常用于对整型对象执行位运算。然而,不是把对象作为一个整体来处理,而是将其当作一个位串来进行不同的操作。
Python有六个位运算符 - &
, |
, ^
, ~
, <<
和 >>
。除了~
之外的所有这些运算符都是二元的,也就是说它们作用于两个操作数上。每个操作数是一个二进制位(位)1 或 0。
Python中的位运算符包括:
Python位AND运算符 (&
)
位AND运算符与逻辑AND运算符有些相似。只有当两个位操作数都是1(即真)时才返回真。所有组合如下:
当你使用整数作为操作数时,这两个整数都会转换成等效的二进制形式,并且从最低有效位开始向最高有效位方向对每个数的相应位执行&
操作。
Python中位AND运算符的例子
让我们取两个整数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。让我们手动执行每个相应位的AND操作。
0011 1100
&
0000 1101
-------------
0000 1100
将结果的二进制数转换回十进制。你会得到12,这是之前获得的结果。
>>> int('00001100', 2)
12
Python位OR运算符 (|
)
|
符号(称为管道)是位OR运算符。如果任何位操作数是1,则结果是1,否则它是0。
Python中位OR运算符的例子
同样使用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运算符 (^
)
术语XOR代表排他性OR。这意味着对两个位执行OR操作的结果将是1,前提是只有一个位是1。
Python中位XOR运算符的例子
让我们在a=60
和b=13
上执行XOR操作。
a = 60
b = 13
print("a:", a, "b:", b, "a^b:", a ^ b)
这将产生以下输出:
a: 60 b: 13 a^b: 49
我们现在手动执行位XOR。
0011 1100
^
0000 1101
-------------
0011 0001
int()
函数显示00110001是49。
>>> int('00110001', 2)
49
Python位NOT运算符 (~
)
这个运算符是逻辑NOT运算符的二进制等价形式。它翻转每个位,使得1被替换为0,0被替换为1,并返回原数的补码。Python使用了二进制补码的方法。对于正整数,简单地反转位即可得到。对于负数-x
,它是用x-1
的位模式来写的,并且所有的位都被翻转(从1到0或从0到1)。因此:(对于8位表示)
-
-1
是complement(1 - 1)
= complement(0)
= "11111111"
-
-10
是complement(10 - 1)
= complement(9)
= complement("00001001")
= "11110110"
Python中位NOT运算符的例子
对于a=60
,其补码是:
a = 60
print("a:", a, "~a:", ~a)
这将产生以下输出:
a: 60 ~a: -61
Python位左移运算符 (<<
)
左移运算符将最显著的位向右移动右边符号<<
后面的位数。因此,x << 2
导致二进制表示的两位向右移动。
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
导致二进制表示的两位向左移动。
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