身份運算子 is is not 位運算子
阿新 • • 發佈:2021-07-08
# (5)身份運算子 is 和 is not (檢測兩個資料在記憶體當中是否是同一個值) # 整型 -5~正無窮 var1 = 100 var2 = 100 print(var1 is var2) # 浮點型 非負數 var1 = -9.1 var2 = -9.1 print(var1 is var2) # bool 相同即可 var1 = True var2 = True print(var1 is var2) # complex 在實數+虛數不相同 (只有虛數的情況下例外) var1 = 6-8j var2 = 6-8j var1 = -10j var2 = -10j print(var1 isvar2) # 容器: 相同字串 , 空元組相同即可 剩下的所有容器都不相同 container1 = () container2 = () print(container1 is not container2) container1 = "你" container2 = "你" print(container1 is not container2) container1 = [1,23,3] container2 = [1,23,3] print(container1 is not container2) # (6)邏輯運算子: and or not # and 邏輯與"""全真則真,一假則假""" res = True and True # True res = True and False # False res = False and True # False res = False and False # False print(res) # or 邏輯或 """一真則真,全假則假""" res = True or True # True res = False or True # True res = True or False # True res = False or False # False print(res) # not 邏輯非 res = not True res = not False print(res) # 邏輯短路 """ 無論後面的表示式是True 還是False 都已經無法改變最後的結果,那麼直接短路,後面的程式碼不執行; (1) True or print("程式執行了 ~ 1111") (2) False and print("程式執行了 ~ 2222") True or print("程式執行了 ~ 1111") True or True => True True or False => True False and print("程式執行了 ~ 2222") False and True => False False and False => False """ """ 計算規律: 先腦補計算當前表示式的布林值是True還是False 如果出現了 True or 表示式 或者 False and 表示式的情況,直接返回前者,後面程式碼不執行 如果沒有出現短路效果,直接返回後者 """ res = 5 and 6 # 6 """ True and True =>True True and False => False """ res = 5 or 6 # 5 res = 0 and 999 res = 0 or "abc" print(res) # 邏輯運算子的優先順序 """ 優先順序從高到低: () > not > and > or """ res = 5 or 6 and 7 # 5 or 7 => 5 res = (5 or 6) and 7 # 5 and 7 res = not (5 or 6) and 7 # not 5 and 7 => False and 7 => False res = 1<2 or 3>4 and 5<100 or 100<200 and not (700>800 or 1<-1) """ not (False or False) => True res = 1<2 or 3>4 and 5<100 or 100<200 and not (700>800 or 1<-1) res = True or False and True or True and True res = True or False or True res = True or True => True """ print(res)
位運算子
# ### (7)位運算子: & | ^ << >> ~ var1 = 19 var2 = 15 # & 按位與 res = var1 & var2 """ 000 ... 10011 000 ... 01111 000 ... 00011 => 3 """ print(res) # | 按位或 res = var1 | var2 """ 000 ... 10011 000 ... 01111 000 ... 11111 """ print(res) # ^ 按位異或 """兩個值不相同=>True 反之返回False""" res = var1 ^ var2 """ 000 ... 10011 000 ... 01111 000 ... 11100 """ print(res) # << 左移 (相當於乘法) """5乘以2的n次冪""" res = 5 << 1 # 10 res = 5 << 2 # 20 res = 5 << 3 # 40 print(res) """ 000 ... 101 => 5 000 .. 1010 => 10 000 ..10100 => 20 000 .101000 => 40 """ # >> 右移 (相當於除法) """5地板除2的n次冪""" res = 5 >> 1 # 2 res = 5 >> 2 # 1 res = 5 >> 3 # 0 """ 000 ... 101 000 ... 010 => 2 000 ... 001 => 1 000 ... 000 => 0 """ print(res) # ~ 按位非 (針對於補碼進行操作,按位取反,包含每一位) """ -(n+1) """ # res = ~22 res = ~19 print(res) """ 原碼:000 ... 10011 反碼:000 ... 10011 補碼:000 ... 10011 補碼: 000 ... 10011 按位非: 111 ... 01100 給你補碼->原碼 補碼:111 ... 01100 反碼:100 ... 10011 原碼:100 ... 10100 => -20 """ res = ~-19 print(res) """ 原碼:100 ... 10011 反碼:111 ... 01100 補碼:111 ... 01101 補碼: 111 ... 01101 按位非: 000 ... 10010 給你補碼->原碼 (因為是整數 ,原反補相同) 000 ... 10010 => 19 """ """ 總結: 個別運算子: 運算子優先順序最高的: ** 運算子優先順序最低的: = ()可以提升優先順序 一元運算子 > 二元運算子 (優先順序) 一元運算子 : 同一時間,操作一個值 ~ - 二元運算子 : 同一時間,操作一個值 + - * / .... 同一種類運算子: 算數運算子 : 乘除 > 加減 邏輯運算子 : () > not > and > or 位運算子 : ( << >> ) > & > ^ > | 整體排序: 算數運算子 > 位運算子 > 比較運算子 > 身份運算子 > 成員運算子 > 邏輯運算子 賦值運算子用來做收尾 """ res = 5+5 << 6 // 3 is 40 and False """ res = 10 << 2 is 40 and False res = 40 is 40 and False res = True and False res = False """ print(res) # 用括號提升下優先順序 res = (5+5) << (6//3) is 40 and False