位运算

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
'''
原文地址:https://www.cnblogs.com/notfind/p/11346890.html