回答
首先記住機器字是固定的大小。說4,你的輸入是:
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
然後一切都推一個位置向左給出:
+---+---+---+---+
| b | c | d | X |
+---+---+---+---+
問什麼作爲X?
- 與轉變把0
- 與旋轉把
a
現在推的一切一個姿勢要正確,得出:
+---+---+---+---+
| X | a | b | c |
+---+---+---+---+
問什麼作爲X?
- 與移把0
- 與算術移位放
a
- 與旋轉放
d
大致。
移位對應於(左移)乘以2,(右移)整數除以2。
算術移位與有符號數的2的補碼錶示有關。在這種表示中,符號是最左邊的位,然後算術移位保留符號(這稱爲符號擴展)。
旋轉沒有普通的數學意義,即使在計算機中也幾乎是過時的操作。
的差異在最右邊的列幾乎解釋。
- 邏輯轉換將數字視爲一串位,並將其轉換爲零。這是C中的
>>
運算符。 算術移位將數字視爲有符號整數(以2s爲補碼),並且「保留」最高位,如果最高位爲0則移位爲零,如果它是一。如果被移位的數字是負數,則C的右移運算符具有實現定義的行爲。
例如,當使用邏輯移位向右移位3位時,二進制數11100101
(十進制的-27,假設2s補碼)變爲00011100
(十進制28)。這顯然令人困惑。使用算術移位,符號位將被保留,結果將變爲11111100
(十進制-4,約爲-27/8)。旋轉既不,因爲最高位被最低位取代。 C沒有操作員進行輪換。
您能否更清楚地解釋算術移位?請舉例嗎? –
@ChandrahasAroori有大量的例子可以在google上找到https://en.wikipedia.org/wiki/Bitwise_operation –
- 1. Verilog中的算術右移
- 2. 邏輯右移操作
- 3. 大會 - 算術右移(SAR)
- 4. 爲什麼邏輯右移和算術右移有一個移位範圍1-32
- 5. 從ADD和NAND向右移位邏輯?
- 6. 右移算術和十六進制數
- 7. 在C中實現邏輯右移C
- 8. 攤位算法和右移
- 9. 算術右移給假結果?
- 10. 算術右移一個size_t值
- 11. android layout:edittext右移和左移
- 12. 對有符號整數進行邏輯右移運算
- 13. PHP右移
- 14. 佈局右移
- 15. 邏輯,算術按位移
- 16. 可修改的右值和常量右值之間的區別是什麼?
- 17. 邏輯和算術移位的輸出
- 18. 按位和左/右移
- 19. 右移並左移(SLL/SRL)
- 20. 爲展位算法實現算術右移
- 21. 查看向右移
- 22. 無符號右移
- 23. Java簽名右移
- 24. 左右移動UIButton
- 25. IE 7 DIV右移
- 26. 如何使PrimeFace的編輯者右移
- 27. MySQL算術加左到右?
- 28. 實施邏輯右移的負數在c
- 29. 左移和右移字符(ASCII值)。
- 30. 布爾型左移和右移
這與C有什麼關係? –
維基百科文章有什麼問題?你不瞭解他們的是什麼? – Lundin
我不明白算術和邏輯轉換之間的區別。 –