问题来自这里:
十进制数-100使用二进制补码存储到8位寄存器中,是什么 3位右算术移位后的小数?
答案是-13
,以下是解决方法:
-100
转换为二进制01100100
10011100
11110011
00001101
Quesiont:
我不明白为什么结果来自第3步,需要再次进行二次补码,答案是-13
而不是13
。
答案 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
逐个评论您的步骤:
- 将
醇>-100
转换为二进制01100100
您没有转换-100
。您正在将100
转换为二进制文件。小修正,但非常重要。
- 两个补充
醇>10011100
这是正确的,因为我们通过反转并添加1
来获取数字的2的补码。
inv(01100100) = 1001 1011
add one = 1001 1100
- 正确算术班次
醇>11110011
为了100%准确,我会说right arithmetic shift three times
- 再次补充
醇>00001101
以下是我认为你的问题是......
结果是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。