文章目錄
- 算數移位
-
- 原碼的算數移位
- 反碼的算數移位
- 補碼的算數移位
- 邏輯移位
-
- 邏輯移位的應用舉例
- 循環移位
移位:通過改變各個數位位和小數點的相對位置,進而改變各數位位的位權。可用移位運算實作乘法、除法
例如原碼為
10101000
進行算數移位

原碼的算數移位——符号位保持不變,僅對數值位進行移位。
- 右移:高位補0,低位舍棄。若舍棄的位=0,則相當于÷2;若舍棄的位≠0,則會丢失精度
- 左移:低位補0,高位舍棄。若舍棄的位=0,則相當于×2;若舍棄的位≠0,則會出現嚴重誤差
反碼的算數移位——正數的反碼與原碼相同,是以對正數反碼的移位運算也和原碼相同。
- 右移:高位補0,低位舍棄。
- 左移:低位補0,高位舍棄
反碼的算數移位——負數的反碼數值位與原碼相反,是以負數反碼的移位運算規則如下,
- 右移:高位補1,低位舍棄。
- 左移:低位補1,高位舍棄。
補碼的算數移位——正數的補碼與原碼相同,是以對正數補碼的移位運算也和原碼相同。
- 左移:低位補0,高位舍棄。
補碼的算數移位——負數補碼=反碼末位+1 導緻反碼最右邊幾個連續的1都因進位而變為0,直到進位碰到第一個0為止。
規律——負數補碼中,最右邊的1及其右邊同原碼。最右邊的1的左邊同反碼
負數補碼的算數移位規則如下:
- 右移(同反碼):高位補1,低位舍棄。
- 左移(同原碼):低位補0,高位舍棄。
- 邏輯右移:高位補0,低位舍棄。
- 邏輯左移:低位補0,高位舍棄。
可以把邏輯移位看作是對“無符号數”的算數移位