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