2017-06-22 278 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 –