1.按位与&
#规则(1&1=1,1&0=0,0&0=0,0&1=0)(两个1结果是1)
>>> 4&5
4
'''
正整数的补码与原码相同
4的补码:00000100
5的补码:00000101
结果 00000100
100B = 4D
'''
>>> -2 & 3
2
'''
10000010
-2的补码:11111110
3的补码: 00000011
00000010
10B = 2D
'''
>>> -4 & -5
'''
10000100 -4原码
11111100 -4的补码 -5的原码10000101
11111011 -5的补码
11111000 得到补码
11110111 减一
10001000 取反得到原码 -8
'''
2.按位并|
#规则( 1|1=1 ,1 |0=1, 0|0=0)(至少有一个1,结果是1)
>>> -2 | -3
-1
'''
-2原码:10000010 -3原码:100000011
-2补码:11111110
-3补码:11111101
按位或 11111111
减一: 11111110
取反: 10000001 -1
'''
3.按位或 ^
#规则(对位相加,不能进位,即:0^0=0,0^1=1,1^0=0,1^1=0)(仅有一个1,结果才是1)
>>> -3 ^ 5
-1
'''
-3原码:10000011
-3补码:11111101
按位或:11111111
原码: 10000001
'''
4.按位翻转 ~(单目运算符)
#规则对其补码进行取反(包括最高位的符号位)
>>> ~ -5
4
'''
10000101
-5的补码:11111011
取反: 00000100
100B = 4D
'''