[请记住,机器字的大小是固定的。说4,您的输入是:
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
然后将所有内容向左移动一个位置:
+---+---+---+---+
| b | c | d | X |
+---+---+---+---+
问什么要输入X?
a
现在将所有内容向右推一个位置:
+---+---+---+---+
| X | a | b | c |
+---+---+---+---+
问什么要输入X?
a
d
大致。
逻辑移位对应于(左移位)乘以2,(右移位)整数除以2。
算术移位与带符号的2的补码表示形式有关。在此表示形式中,符号是最左边的位,然后算术移位将保留符号(这称为符号扩展)。
Rotate没有一般的数学含义,即使在计算机中也几乎是过时的操作。
在最右边的栏中几乎解释了差异。
>>
运算符。算术移位将数字视为有符号整数(以2s补码形式),并“保留”最高位,如果最高位为0,则移位为零;如果最高位为1,则移位为零。如果要移位的数字为负,则C的右移运算符具有实现定义的行为。例如,当使用逻辑移位右移3位时,二进制数11100101
(十进制为-27,假定为2s补码)变为00011100
(十进制28)。这显然令人困惑。使用算术移位,将保留符号位,并且结果将变为11111100
(十进制-4,对于-27 / 8大约正确)。
Rotation都不做,因为最高位被最低位代替。 C没有操作员可以旋转。