''
位运算:争对二进制进行的运算
取反:~
1.已知十进制负数,求二进制负数:
步骤:1.正数的原码 2.原码取反 3,二进制 +1---》得到的二进制就是负数
例如:-7:
1.求+7的原码: 0000 0111 原码
2.原码取反: 1111 1000
3.加一: 1111 1001
2.已知二进制的负数,求对应的十进制
(判断负的二进制的依据,看最高位:1111 1010,最高位1则为负数,最高位为0则为正数)
步骤:1已知二进制(负) 2.二进制补码 -1 3.取反 4.得到原码 转换成 十进制 + 负号 -
例如:1111 1010
1.已知补码: 1111 1010
2.二进制补码-1: 1111 1001
3.取反: 0000 0110
4.原码: 0000 0110 转换 6 加负号 -6
3. ~ 4 就是把4的二进制取反
1.求正数原码: 0000 0100
2.取反 - 1: 1111 1011 -1 1111 1010
3.在取反 得原码 :0000 0101 得 5 加- -5
同或:& 上下数位一样为 1,不同为 0
异或:| 上下数位一样为 0,不同为 1
'''
同或,异或
n1 = 0b0110 # 6
n2 = 0b0010 # 2
print(n1 & n2)
print(n1 | n2)
print('-' * 20)
a = 5
b = 9
print(a & b)
print(a | b)
'''
n1 = 0b0110 #6 6 0110 5 & 9 0101 0101
n2 = 0b0010 #2 2 0010 1001 1001
0&0 --->0 异或: 0100 1&1 --->1 异或 1101
1&1 --->1 0&0 --->0
1&0 --->0 1&0 --->0
0&0 --->0 0&1 --->0
ob 0010--->2
'''
左移符,右移符
n = 12 # 0000 1100
print(n << 1) # 0000 1100 补0 00001 1000
print(n << 2) # 12*2*2
print(n << 3) # 12*2*2*2
print('-' * 20) #
print(n >> 1) # 12//2
print(n >> 2) # 12//2//2
print(n >> 3) # 12//2//2//2
print('-' * 20)
a = 89
b = 93
print(a >> 5)
print(b << 3)
'''
> < 比较符参与运算的时候 默认True为 1,False为0 可以进行运算
'''
a=1
b=2
x=50
print(b>a+(x<a+b)) #先比较(x<a+b)50<3 为假False ,b>a+False(0) b>a+0