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


# ### 位運算符  & | ~ ^ << >>
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
'''

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM