算數左移位

算數左移位

移位操作是計算機指令中比較基本的操作,是位運算的一種。在移位運算時,byte、short和char類型移位後的結果會變成int類型,對於byte、short、char和int進行移位時,編譯器未做任何最佳化的情況下(最佳化後不可預期),規定實際移動的次數是移動次數和32的餘數,也就是移位33次和移位1次得到的結果相同。移動long型的數值時,規定實際移動的次數是移動次數和64的餘數,也就是移動66次和移動2次得到的結果相同。

算數左移位,即算術左移位,是一種帶符號的左移位運算。

基本介紹

  • 中文名:算數左移位
  • 外文名:Arithmetic left shift
  • 別名:算術左移位
  • 領域:計算機編程
  • 學科:計算機科學
  • 相關:邏輯移位
簡介,舉例,算術移位與邏輯移位,相關,

簡介

在計算機指令中,移位操作是一種基本操作,是一種直接對二進制數據的位運算操作。
而移位運算又包含了邏輯移位(logical shift)和算術移位(arithmetic shift)兩種。
邏輯移位:移出去的位丟棄,空缺位(vacant bit)用 0 填充。
算術移位:移出去的位丟棄,空缺位(vacant bit)用“符號位”來填充,所以一般用在右移運算中。

舉例

對於二進制數1010101010進行算術移位操作,其中[]是添加的位:
算數左移一位:010101010[0]
算數右移一位[1]101010101

算術移位與邏輯移位

①如果是無符號數,不管是左移還是右移都是“邏輯移位”
例如,分別對無符號數179做左移、右移操作的結果,
算數左移位
圖1 邏輯左移
算數左移位
圖2 邏輯右移
②如果是有符號數,則做左移運算,即做的是“邏輯移位”,同 ①中無符號數的左移。而做右移運算,那么做的是“算術移位”。
算數左移位
圖3 帶符號位1的算術右移
算數左移位
這裡的進位位C,它就是標誌暫存器(即狀態暫存器,亦稱程式狀態字暫存器PSW)中的那個進位位,指示是否有進位或者借位,若有則該位為1,否則為0。邏輯左移跟算術左移完全一樣。而邏輯右移跟算術右移則不一樣,邏輯右移的最高位在移出後補0,而在算術右移中,最高位(這裡的最高位指整個編碼的最高位,即有符號數的符號位)不變,其他跟邏輯右移一樣。
算術左移和算術右移主要用來進行有符號數的倍增、減半; 邏輯左移和邏輯右移主要用來進行無符號數的倍增、減半。
有符號和無符號的算術左移雖然方式是一樣的,但他們表示的移位後數的範圍是不一樣的,有符號數左移(算術左移)位後的範圍是-128——127【指8位】。而無符號數(算術左移)左移的範圍是0——255【指8位】。

相關

循環移位
循環移位分為帶進位位C和不帶進位位C兩種:
算數左移位
圖5 循環移位
注意,在循環移位中沒有算術、邏輯之分,只有是否帶進位位之分。在循環移位中,只有“帶進位的循環右移”這種方式中,進位位C才對移位後的結果產生影響,其他的進位位都是受影響(被新移入的二進制位覆蓋)。

相關詞條

熱門詞條

聯絡我們