算术移位后的数字是什么意思?

What is the meaning of the number after Arithmetic shift?

问题出处:

A decimal number -100 stores into an 8 bits register using two's complement, What is the decimal after the 3 bits right arithmetic shift?

答案是-13,这是它如何解决的:

  1. -100转换为二进制01100100
  2. 补码10011100‖‖
  3. 算术右移11110011
  4. 再次补码00001101

问题: 我不明白为什么从第3步得到结果,需要再次进行补码,答案是-13而不是13

正确的转换应该是:

Decimal   = Binary 2's complement
-100      = 1001 1100
-100 >> 1 = 1100 1110 = -50
-100 >> 2 = 1110 0111 = -25
-100 >> 3 = 1111 0011 = -13

评论您的步骤,on-by-one:

  1. convert -100 to binary 01100100

您没有转换 -100。您正在将 100 转换为二进制。小修正,但非常重要。

  1. two's complement 10011100

这是正确的,因为我们通过取反并加上 1 来取一个数的 2 的补码。

inv(01100100) = 1001 1011
add one       = 1001 1100 
  1. right arithmetic shift 11110011

为了 100% 准确,我会说 right arithmetic shift three times

  1. two's complement again 00001101

这是我认为你的问题...

所以结果是 11110011 我们都同意这一点。这里的问题是 11110011 的十进制是多少?我知道进行转换的两种方法。我会在这里总结一下。

方法一:二进制补码

我们知道11110011是一个负数,因为它的MSB是1。为了找出值是多少,我们采用 2 的补码。所以我们反转值并添加 1.

inv(11110011) = 0000 1100
add 1         = 0000 1101
                ---------
convert to decimal     13

所以,我们知道它是负数,现在我们知道它的价值了。所以 -13 就是答案。

方法二:使用权重

我们为每个位分配一个权重,然后将它们全部加在一起。所有位都具有正权重,除了具有负权重的 MSB。

Bit index    7  6   5  4  3  2  1  0
Weight    -128 64  32 16  8  4  2  1

所以对于我们的结果,我们有:

Bit index    7   6   5   4   3   2   1   0
Weight    -128 +64 +32 +16  +8  +4  +2  +1
-------------------------------------------
-13          1   1   1   1   0   0   1   1
          -128 +64 +32 +16  +0  +0  +2  +1

-128
+ 64
+ 32
+ 16
+  2
+  1
----
 -13 

这两种方法都是有效的,最后会给你正确的转换,这取决于你喜欢哪种转换方法。

如果您有任何疑问,请阅读 this