位运算符通常用于在操作数之间逐位进行逻辑运算,使用从左到右的相应索引(相同权重)位。在
你必须考虑操作数的二进制表示
示例:>>> bin(4 & 6)
'0b100'
>>> bin(4)
'0b100'
>>> bin(6)
'0b110'
>>> bin(4 & 6)
'0b100'
>>> bin(8)
'0b1000'
>>> bin(4 & 8)
'0b0'
>>> bin(4 | 8)
'0b1100'
>>>
通常你不会把这些操作数和逻辑操作数混在一起,你可以,但这是不常见的。在
位运算符在以二进制或十六进制形式思考时非常有用,而且对于一组标志的紧凑表示也是非常有用的。在
示例(伪造):
以单个字节表示的打印机状态,其中位0表示联机,0表示脱机。位1表示卡纸,0表示纸张正常。第3位为1,表示打印机准备就绪。你不在乎其他5个字。在
假设
^{pr2}$
见最后三位:0b101表示在线,纸张正常,准备就绪
设为离线(强制位0到0)status = status & 0b11111110 # same as status = status & 254
摆脱你不在乎的地位my_status = status & 0b00000111 # same as my_status = status & 7
将标志设置为1,但保留不关心原始值的标志status = status | 0b00000111
这里的0b数字有时用十六进制表示法,甚至可以写成十进制(在这种情况下,让它们具有神奇的视觉效果,而二进制和十六进制则向读者明确地显示位值)数字被称为位掩码。它根据掩码值和位运算符(|设置,&重置),设置/取消所需的位并保留其余的位
现在您可以看到,在处理True、False、0和空/非空对象时,逻辑运算符的规则有点不同。。。在