2017-06-22 281 views

回答

3

首先記住機器字是固定的大小。說4,你的輸入是:

+---+---+---+---+ 
| a | b | c | d | 
+---+---+---+---+ 

然後一切都推一個位置向左給出:

+---+---+---+---+ 
| b | c | d | X | 
+---+---+---+---+ 

問什麼作爲X?

  1. 轉變把0
  2. 旋轉a

現在推的一切一個姿勢要正確,得出:

+---+---+---+---+ 
| X | a | b | c | 
+---+---+---+---+ 

問什麼作爲X?

  1. 把0
  2. 算術移位a
  3. 旋轉d

大致。

移位對應於(左移)乘以2,(右移)整數除以2。

算術移位與有符號數的2的補碼錶示有關。在這種表示中,符號是最左邊的位,然後算術移位保留符號(這稱爲符號擴展)。

旋轉沒有普通的數學意義,即使在計算機中也幾乎是過時的操作。

2

的差異在最右邊的列幾乎解釋。

  • 邏輯轉換將數字視爲一串位,並將其轉換爲零。這是C中的>>運算符。
  • 算術移位將數字視爲有符號整數(以2s爲補碼),並且「保留」最高位,如果最高位爲0則移位爲零,如果它是一。如果被移位的數字是負數,則C的右移運算符具有實現定義的行爲。

    例如,當使用邏輯移位向右移位3位時,二進制數11100101(十進制的-27,假設2s補碼)變爲00011100(十進制28)。這顯然令人困惑。使用算術移位,符號位將被保留,結果將變爲11111100(十進制-4,約爲-27/8)。

  • 旋轉既不,因爲最高位被最低位取代。 C沒有操作員進行輪換。

+0

您能否更清楚地解釋算術移位?請舉例嗎? –

+0

@ChandrahasAroori有大量的例子可以在google上找到https://en.wikipedia.org/wiki/Bitwise_operation –