首頁 > 軟體

小敏學Python基礎篇丨移位運算的用法講解

2021-05-23 19:00:28

Hello,大家好,我是程式媛小敏,持續為您分享python知識。

前面,我們一起學習了python中四種位運算符(&、|、^、~)的用法,本篇我們一起學習剩餘的兩種移位運算符(左移位<<、右移位>>)。

01移位運算的本質

移位運算是一種二進位制的運算符。它是把一個二進位制數,符號位不變,其餘位進行向左或向右移動,左側空的數位就補符號位的數,右側空的數位就補0,溢位的數位就捨棄。

前面我們學習過,對於一個數,是由不同數位構成了,每個數位對應著一個權重。相鄰數位的權重比在二進位制中就是2,在十進位制中就是10(其他進制中也是類似)。

十進位制數個位權重為1,十位為10,而二進位制正數的末位權重為1,從右往左,權重每次提高為2倍。

那麼,對一個數左移位運算,就相當於把數字從較低權重的數位,移動到了較高權重的數位,移動幾步,就放大了幾個2倍(即2的幾次冪)。

右移位,就相當於把數字從較高權重的數位,移動到較低權重的數位,移動幾步就縮小了幾個2倍。

注意:移位運算時,符號位不變,空的數位補0,溢位數位捨棄。

02左移位運算符用法

前面我們學習了,在計算機中的二進位制數的計算均是使用補碼參與運算的,移位運算也不例外。

這裡我分別舉兩個正數和負數的例子加以說明(為了方便計算,本篇採用8位機器數演示):

定義兩個變數 a = 7,b = -8,用二進位制原碼、反碼和補碼分別表示如下:a的原碼:0000 0111 ,a的反碼:0000 0111 ,a的補碼0000 0111b的原碼:1000 1000 ,b的反碼:1111 0111 ,b的補碼1111 1000

下面對a和b分別進行左移位運算(以移動2位為例)。

a << 2,將0000 0111按照左移位的原理,得到結果是0001 1100,這個結果是正數,即轉原碼還是它,轉成十進位制為:28,即7 <<2 = 28。b << 2,同理,得到結果是1110 0000,先轉反碼得1001 1111,再加1得補碼為1010 0000,轉成十進位制為:-32,即-8 <<2 = -32。

從結果來看,7左移兩位,相當於7*2的2次冪。

注意:正數的原碼、反碼和補碼相等

這裡,如果對二進位制的補碼求法,以及十進位制和二進位制轉換有疑問的友友可以看下面文章:

理解了地球是圓的,你就可以理解二進位制減法轉化為加法的奧妙

一文讀懂十進位制和二進位制的轉化

03右移位運算符的用法

這裡繼續使用上面的a、b,以右移位2位為例講解:

a >> 2,同理,按照右移位的原理,得到結果是0000 0001,這是個正數,即轉原碼還是它,轉為十進位制為:1,即 7 >> 2 = 1。b >> 2,同理,得到結果是1111 1110,先轉反碼得1000 0001,再加1得補碼為1000 0010,轉成十進位制為:-2,即-8 >> 2 = -2。

注意:右移位時,符號位不參與移動,左側空的數位,用符號位的數補充。

好了,關於python位運算符的學習到本篇就結束了,各位友友學會了麼?歡迎大家在評論區留言討論交流。我是程式媛小敏,持續為您分享python知識乾貨。


IT145.com E-mail:sddin#qq.com