答案 0 :(得分:15)
首先要记住,机器字的大小是固定的。说4,你的输入是:
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
然后向左推一个位置给出:
+---+---+---+---+
| b | c | d | X |
+---+---+---+---+
问什么作为X?
a
现在向右推一个位置给出:
+---+---+---+---+
| X | a | b | c |
+---+---+---+---+
问什么作为X?
a
d
大致。
逻辑移位对应于(左移)乘以2,(右移)整数除以2。
算术移位与签名数字的2&x补码表示有关。在此表示中,符号是最左边的位,然后算术移位保留符号(这称为符号扩展)。
旋转没有普通的数学意义,即使在计算机上也几乎是一个过时的操作。
答案 1 :(得分:4)
差异在最右边的专栏中得到了很好的解释。
>>
运算符。算术移位将数字视为有符号整数(以2s补码表示),并“保留”最高位,如果最高位为0则移位为零,如果为1则移位为1。如果被移位的数字为负,则C的右移运算符具有实现定义的行为。
例如,二进制数11100101
(-27为十进制,假设为2s补码),当右使用逻辑移位的3位移位变为00011100
(小数28)。这显然令人困惑。使用算术移位,符号位将保留,结果将变为11111100
(十进制-4,约为-27 / 8)。
旋转既没有,也没有,因为最高位被最低位替换。 C没有操作员进行轮换。
答案 2 :(得分:1)
逻辑右移表示向右移位,而MSB(最高有效位)变为0。
示例:数字1 0 1 1 0 1 0 1的逻辑右移是 0 1 0 1 1 0 1 0。
算术右移表示向右移位,并且MSB(最高有效位)与原始数字相同。
示例:数字的算术右移 1 0 1 1 0 1 0 1为 1 1 0 1 1 0 1 0。