算術運算、比較運算、指派運算、位和位運算、運算優先級
python裡的算術運算
我們最熟悉的計算就是算術運算,加減乘除等。在python的算術運算中,除了四則運算外,還有幂運算、取模、取整運算。
什麼是取模、取整運算呢?取模和取整運算和除法相關。取模即取除法的餘數,取整即取除法的商。
11%7
取模運算,結果為:4
11//7
取整運算,結果為:1
如果是負數取模取整,會是怎樣的結果呢?
i1=-11%7i2=-11%-7i3=-11//7i4=-11//-7print(i1,i2,i3,i4)
結果是:3 -4 -2 1
下面有一個混合運算,猜心算一下運作結果會是怎樣的呢?
4*2**3//6+2%7-2
很顯然,這裡就牽涉到不同運算之間的優先級。
算術運算裡,優先級從高到低是:幂運算、乘除取模取整、加減
4*2**3//6+2%7-2
運作結果:5 和你心算的結果是不是一樣呢?
python裡的比較運算
所謂的比較運算就是等于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(
9!=10
運作結果:True
9!=9
運作結果:False
python裡的指派運算
在程式裡,指派也是一種運算。指派的符号“=”,以後我們還會碰到諸如:“+=”、“-=”……等指派運算。
來看一個範例:
i=5+4==6-1 print(i)
運作結果為:False
這個混合運算裡有算術運算、比較運算和指派運算,這些運算的優先級,從高到低依次是:算術運算、比較運算、指派運算。
i=5+4==6-1
i=9==5 (9不等于5,是以此比較運算結果為False)
i=False
python裡的位運算
什麼是“位”?
“位”是資料存儲的最小機關。在計算機中二進制數系統中,每個0或1就是一個“位”,英文寫作bit,簡記為b,稱為比特。“位”就如同下圖中的格子,每一個格子就是一個“位”,而每一個“位”存儲的資料隻有兩種可能,要麼是“0”,要麼是“1”。我們将8個“位”稱為一個“位元組”,英文是Byte。“位”和“位元組”的轉換公式是:8b=1B。位元組大小的轉換關系是這樣的:1024B=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB……
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO4QmY0IDMmBDNklzM3MzMmhTN5EmN2cjMmVWYkVmZy8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
對于“位”有一些了解了。下面我們再來複習一下二進制。
和滿10進一位的十進制不同,二進制是滿2就要進一位的一種進制,二進制隻有兩個數值:0和1。如果你初次接觸二進制,建議你不妨先做一個将十進制的0-10轉換成二進制的練習。最容易犯錯的地方是十進制的4和8。下圖是十進制0-10對應的二進制,看看你轉換對了沒有。
有了“位”的了解和二進制的知識,我們就來探究一下基于二進制的位運算。
—— “&” 按位 與 的運算 ——
按位與的運算規則是:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
或許這個規則不太好了解,我借用電路來說明一下。
開關開就是“1”,關就是“0”;燈亮是“1”,燈滅是“0”。
嘗試用python代碼來實作一下:8&6
python的位運算也是先将十進制數值化為二進制後再進行的運算。
print(8&6)
運算結果是:0
我們再來人工列式演算一下,一來校驗結果,二來清晰地了解按位與的運算過程:
計算一下“10&6”呢?我們先人工列式演算一下:
python代碼來運作:
print(10&6)
運作的結果果真是:2
—— “ | ” 按位 或 的運算 ——
按位或的運算規則是:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
為了友善大家了解,我也同樣借用電路來說明“按位或”的運算規則。
開關開就是“1”,關就是“0”;燈亮是“1”,燈滅是“0”。
我想算算“8|6”,用python代碼來運算。
print(8|6)
運作結果是:14 我再來用python算一算“10|6”
print(10|6)
運作結果還是:14 嗯?怎麼是一樣的答案?
好吧,我們來人工列式演算一下,一來校驗結果,二來清晰地了解按位或的運算過程:
—— “ ^ ” 按位 異或 的運算 ——
什麼是“異或”?“異或”和“或”有什麼不同呢?
我們用維恩圖來做個說明:
“異或”和“或”在運算上有怎樣的不同呢?我清單做了一個對比。
兩個計算的不同之處,我用黃色框凸顯出來。
我們現在用python編碼來算算“8^6”
print(8^6)
運作結果是:14 和“按位或”的計算結果一樣,那麼,“10^6”的計算結果也還是14嗎?
print(10^6)
運作結果是:12
為什麼“10^6”和“8^6”“按位或”的計算結果是一樣的,但是“按位異或”的計算結果卻不一樣呢?
我們用人工列式演算一下,你是否看出其中的差别呢?
位運算還有“按位取反運算”、“左移動運算”和“右移動運算”,以後再慢慢學習。
此文原發表于知乎網站。