回答
首先记住机器字是固定的大小。说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
我不明白算术和逻辑转换之间的区别。 –