运算符 | 描述 | 示例 |
---|---|---|
& | 按位与,都为1,结果为1,有一个0,就为0 | a & b |
| | 按位或,都为0,结果为0,有一个1,就为1 | a | b |
^ | 按位异或,不同,结果为1,相同,就为0 | a ^ b |
~ | 按位取反,1变0,0变1 | ~a |
<< | 左移动,高位丢弃,低位补0 | a << 2,左移2位 |
>> | 右移动,丢弃右移位数,高位补0 | a >> 3,右移3位 |
a = 0b00111100 # 60的二进制
b = 0b00001101 # 13的二进制
print(a&b,'=',bin(a&b))#12 = 0b1100
print(a|b,'=',bin(a|b))#61 = 0b111101
print(a^b,'=',bin(a^b))#49 = 0b110001
print(~a,'=',bin(~a))#-61 = -0b111101
print(a<<2,'=',bin(a<<2))#240 = 0b11110000
print(a>>2,'=',bin(a>>2))#15 = 0b1111
手动运算示例:
图中取反示例不全,注意下文——按位取反详解
计算机中有原码、反码、补码,均有符号位和数值位,符号位用0表示“正”,用1表示“负”。
计算机一般用补码来表示和存储数值,因为补码可以将符号位和数值位统一处理。
正数的补码,与原码相同。
负数的补码,将原码的数值位取反(0变1,1变0),再加1。
print(~60,'=',bin(~60))#-61 = -0b111101
print(~-30,'=',bin(~-30))#29 = 0b11101