【问题标题】:What is the meaning of the number after Arithmetic shift?算术移位后的数字是什么意思?
【发布时间】:2018-09-18 22:52:08
【问题描述】:

问题来自这里:

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

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

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

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

【问题讨论】:

  • 正确的算术移位应该就像除以 2。-100 >> 1 应该是 -50 我不明白你是怎么得到-13 的。你确定-13 是你要找的答案吗?

标签: binary decimal twos-complement


【解决方案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

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

  1. 二进制补码10011100

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

inv(01100100) = 1001 1011
add one       = 1001 1100 
  1. 算术右移11110011

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

  1. 再次补码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

【讨论】:

  • 对不起,弄错了,我更正了问题。请看一看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多