天天看點

計組——了解算術移位和邏輯移位算術移位邏輯移位補充:循環移位

算術移位

算術移位(指數位位的移動)通過改變各個數位位和小數點的相對位置,進而改變各數位位的位權。可用移位運算實作乘法、除法。

算術移位針對有符号數,在移位過程中,符号位保持不變。

對于十進制來說,小數點左移1位,即數字右移相當于除以10,右移1位即數字左移相當于乘以10

那麼對于二進制來說,算術右移 1位,相當于除以2;算術左移相當于乘以2

在計算機硬體實作時,移位之後需要對空位進行添補,區分正負數來讨論:

由于正數的原碼、補碼、反碼相同,是以算術右移的時候高位補0,低位舍棄,若舍棄位是0,則相當于除以2,若舍棄位不是0,則會丢失精度;算術左移時,高位舍棄,若舍棄位是0,則相當于乘以2,若舍棄位不是0,則會出現嚴重誤差。

而負數的原碼算術移位時添補0

反碼算術移位時添補1

補碼左移添0,右移添1(最右邊的1在變成原碼時,會産生進位,是以從右往左第一個不是1的數字左邊同反碼,剩餘同原碼。是以添補規則左移時空出來右邊,添補規則同原碼;右移時空出來左邊,添補規則同反碼)

計組——了解算術移位和邏輯移位算術移位邏輯移位補充:循環移位

【例】計算機硬體實作-20*7

【分析】7D=111B= 2 0 + 2 1 + 2 2 2^{0}+2^{1}+2^{2} 20+21+22

即就是對-20執行(不左移、左移1位、左移2位、加法)這些操作

邏輯移位

邏輯右移:高位補0,低位舍棄;

邏輯左移:低位補0,高位舍棄;

左移時最低位補0,右移時最高位補0的移位操作;可以把邏輯移位看做是對“無符号數”的算術移位(不考慮符号位)

應用場景舉例1:原碼一位乘法運算

在進行乘法運算過程中,乘數(儲存在MQ中)的最低位與被乘數(儲存在X中)運算後的結果會更新到ACC當中,之後(ACC和MQ)會執行邏輯右移,MQ低位丢棄,ACC邏輯右移後高位補0,MQ中新的低位繼續與被乘數運算,得到的結果累加到ACC中,重複以上步驟,得到最終的結果(ACC和MQ拼接起來)

應用場景舉例2:邏輯移位生成RGB色

👉戳這裡:邏輯移位RGB

原碼一位乘法:(機器字長n+1,數值部分占n位)

符号位通過異或确定;

數值部分通過被乘數和乘數絕對值的n輪加法、移位完成

根據目前乘數彙總參與運算的位确定(ACC)加什麼,若目前運算位=1,則(ACC)+[|x|]原;若=0,則(ACC)+0

每輪加法後ACC、MQ的内容統一邏輯右移

補充:循環移位

移出的那一位數值添補到空出的那一位

帶進位位的循環移位:

移出的那一位移動到進位位,空出的那一位用進位位的數值添補

應用場景舉例:大端存儲和小端存儲的互相轉換