Python 位运算操作符
Python的位运算操作符通常与整数类型对象一起使用。然而,它不是将对象作为一个整体处理,而是将其作为一串位处理。在字符串中,对每个位执行不同的操作。
Python有六个位运算操作符 -
&
、|
、^
、~
、<<
和>>
。所有这些操作符(除了~)都是二元的,即它们在两个操作数上进行运算。每个操作数都是一个二进制位(1或0)。
Python位与操作符(&
)
位与操作符与逻辑与操作符类似。只有当两个位操作数都为1(即True)时,它才返回真。所有的组合都是-
0 & 0 is 0
1 & 0 is 0
0 & 1 is 0
1 & 1 is 1
当您将整数用作操作数时,两个整数将被转换为等效的二进制形式,并且& 操作将在每个数的对应位上执行,从最低有效位开始,向最高有效位方向进行。
让我们分别将两个整数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 位或运算符 (|
)
符号 |
(称为 管道
)是位或运算符。如果任何位操作数为1,结果为1,否则为0。
0 | 0 is 0
0 | 1 is 1
1 | 0 is 1
1 | 1 is 1
将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 运算的结果只有在只有一个位为 1 时才会是 1。
0 ^ 0 is 0
0 ^ 1 is 1
1 ^ 0 is 1
1 ^ 1 is 0
让我们对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
我们现在手动执行位异或操作。
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 is complement(1 - 1) = complement(0) = "11111111"
-10 is complement(10 - 1) = complement(9) = complement("00001001") = "11110110".
对于a=60,它的补数是−
a=60
print ("a:",a, "~a:", ~a)
它将产生以下 输出 –
a: 60 ~a: -61
Python 左移位运算符(<<
)
左移位运算符通过右侧的<<
符号将最高有效位向右移动了指定的位数。因此,x << 2
会将二进制表示的x向右移动两位。 让我们对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 向左移动两位。让我们对 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