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

时间:2018-04-09 13:52:25

标签: binary decimal twos-complement

问题来自这里:

  

十进制数-100使用二进制补码存储到8位寄存器中,是什么   3位右算术移位后的小数?

答案是-13,以下是解决方法:

  1. -100转换为二进制01100100
  2. 两个补码10011100
  3. 正确算术班次11110011
  4. 再次补充00001101
  5. Quesiont:  我不明白为什么结果来自第3步,需要再次进行二次补码,答案是-13而不是13

1 个答案:

答案 0 :(得分:1)

正确的转换应该是:

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

逐个评论您的步骤:

  
      
  1. -100转换为二进制01100100
  2.   

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

  
      
  1. 两个补充10011100
  2.   

这是正确的,因为我们通过反转并添加1来获取数字的2的补码。

inv(01100100) = 1001 1011
add one       = 1001 1100 
  
      
  1. 正确算术班次11110011
  2.   

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

  
      
  1. 再次补充00001101
  2.   

以下是我认为你的问题是......

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

方法1:补充

我们知道11110011是一个负数,因为它的MSB是1。为了找出价值是什么,我们采用2的补充。因此我们将值反转并添加1

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

所以,我们知道这是消极的,现在我们知道它的价值。所以-13就是答案。

方法2:使用权重

我们将权重归因于每个比特,我们将它们全部加在一起。除了具有负权重的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