天天看點

python 01清單異或_跟我一起學python | 探究05

算術運算、比較運算、指派運算、位和位運算、運算優先級

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……

python 01清單異或_跟我一起學python | 探究05

對于“位”有一些了解了。下面我們再來複習一下二進制。

和滿10進一位的十進制不同,二進制是滿2就要進一位的一種進制,二進制隻有兩個數值:0和1。如果你初次接觸二進制,建議你不妨先做一個将十進制的0-10轉換成二進制的練習。最容易犯錯的地方是十進制的4和8。下圖是十進制0-10對應的二進制,看看你轉換對了沒有。

python 01清單異或_跟我一起學python | 探究05

有了“位”的了解和二進制的知識,我們就來探究一下基于二進制的位運算。

—— “&” 按位 與 的運算 ——

按位與的運算規則是:

0 & 0 = 0

0 & 1 = 0

1 & 0 = 0

1 & 1 = 1

或許這個規則不太好了解,我借用電路來說明一下。

開關開就是“1”,關就是“0”;燈亮是“1”,燈滅是“0”。

python 01清單異或_跟我一起學python | 探究05

嘗試用python代碼來實作一下:8&6

python的位運算也是先将十進制數值化為二進制後再進行的運算。

print(8&6)           

運算結果是:0

我們再來人工列式演算一下,一來校驗結果,二來清晰地了解按位與的運算過程:

python 01清單異或_跟我一起學python | 探究05

計算一下“10&6”呢?我們先人工列式演算一下:

python 01清單異或_跟我一起學python | 探究05

python代碼來運作:

print(10&6)           

運作的結果果真是:2

—— “ | ” 按位 或 的運算 ——

按位或的運算規則是:

0 | 0 = 0

0 | 1 = 1

1 | 0 = 1 

1 | 1 = 1

為了友善大家了解,我也同樣借用電路來說明“按位或”的運算規則。

開關開就是“1”,關就是“0”;燈亮是“1”,燈滅是“0”。

python 01清單異或_跟我一起學python | 探究05

我想算算“8|6”,用python代碼來運算。

print(8|6)           

運作結果是:14 我再來用python算一算“10|6”

print(10|6)           

運作結果還是:14   嗯?怎麼是一樣的答案?

好吧,我們來人工列式演算一下,一來校驗結果,二來清晰地了解按位或的運算過程:

python 01清單異或_跟我一起學python | 探究05

 —— “ ^ ” 按位 異或 的運算 ——

什麼是“異或”?“異或”和“或”有什麼不同呢?

我們用維恩圖來做個說明:

python 01清單異或_跟我一起學python | 探究05

“異或”和“或”在運算上有怎樣的不同呢?我清單做了一個對比。

python 01清單異或_跟我一起學python | 探究05

兩個計算的不同之處,我用黃色框凸顯出來。

我們現在用python編碼來算算“8^6”

print(8^6)           

運作結果是:14 和“按位或”的計算結果一樣,那麼,“10^6”的計算結果也還是14嗎?

print(10^6)           

運作結果是:12

為什麼“10^6”和“8^6”“按位或”的計算結果是一樣的,但是“按位異或”的計算結果卻不一樣呢?

我們用人工列式演算一下,你是否看出其中的差别呢?

python 01清單異或_跟我一起學python | 探究05

位運算還有“按位取反運算”、“左移動運算”和“右移動運算”,以後再慢慢學習。

此文原發表于知乎網站。

繼續閱讀