位运算符 & | ~ ^ << >>

# ### 位运算符  & | ~ ^ << >>
var1 = 19
var2 = 15
# & 按位与
"""
res = var1 & var2
print(res)
"""
'''
000...10011
000...01111
000...00011
'''

# | 按位或
res = var1 | var2
'''
000...10011
000...01111
000...11111
'''
print(res)


# ^ 按位异或
res = var1 ^ var2
'''
000...10011
000...01111
000...11100
'''
print(res)

# << 左移  (左移  相当于乘以2的几次幂 n << m 相当于n乘2的m次幂)
res = 5 << 1
res = 5 << 3
print(res)
'''
000...101
000..1010
'''

# >> 右移 (右移  相当于除以2的几次幂 n >> m 相当于n除2的m次幂)
res = 5 >> 1  # 5 // 2的1次幂 => 2
res = 5 >> 2  # 5 // 2的2次幂 => 1
res = 5 >> 3  # 5 // 2的3次幂 => 0
print(res)
'''
000...101
000....10  =>2
000....01  =>1
'''

# ~ 按位非 (按位非 操作的二进制的补码, 对二进制的每一位进行取反,包括符号位)   公式:-(n+1)
res = ~19
print(res)
'''
000...10011  (补码)
111...01100  (按位非)

# 给补码求原码
111...01100

100...10011  (反码)
100...10100  (原码 = 反码+1)
十进制 => -20
'''
res= ~(-19)
print(res)
'''
1000...10011  (原码)
1111...01100  (反码)
1111...01101  (补码)

# 现在进行按位非
0000...10010  
因为高位都是0是正数
原码 = 反码 = 补码
0000...10010  (原码)
'''

"""
运算符的优先级:
() 括号优先级最高
** 优先级其次
=  优先级最低

一元运算符:同一时间只操作一个数字的 (- , ~)
二元运算符:同一时间能操作二个数字的 (+ , -...)
~19+5
一般来说,一元运算符 大于 二元运算符的优先级

+ - * /       =>    * / 大于 + - 
() not and or =>    not > and > or

如果都是二元运算符:
算术运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 
赋值运算符 作为最后等号右边的值算好后进行赋值.
"""
res = 5+5 << 6 // 3 is 40 and True
print(res)
'''
5+5 << 2 is 40 and True
10 << 2 is 40 and True
40 is 40 and True
True and True
True
'''

  

猜你喜欢

转载自www.cnblogs.com/huangjiangyong/p/10788280.html