1. 程式人生 > 其它 >身份運算子 is is not 位運算子

身份運算子 is is not 位運算子

# (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 is
var2) # 容器: 相同字串 , 空元組相同即可 剩下的所有容器都不相同 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