使用二进制补码将两个小数相加

问题描述 投票:0回答:1

给出的问题:

假设 151 和 214 是以二进制补码格式存储的有符号 8 位十进制整数。计算151+214,结果应写成十进制。检查是否溢出。提示:当两个正数相加的结果为负数时,就会发生溢出。

老师的解决方案:

第1步:

将两个数字写成二进制:

214=11010110

151 = 10010111

第2步:

使用补码表示重写:

214=11010110=00101010

151 = 10010111 = 01101001

第三步:

将二进制补码结果转换为十进制:

214 = 11010110 = 00101010 = -105

151 = 10010111 = 01101001 = -42

第四步:

添加:100101010+01101001 = 10010011

第五步:

将结果转换为十进制: 10010011 = -147

结论:可以看出,存在溢出

我的问题是:

第 1 步: 为什么 214 和 151 都是正数时,214 和 151 转换成二进制的结果的最高位都等于 1(负数)?它们的二进制值不分别等于011010110和010010111吗?

第 3 步: 两个数的补码结果转换为十进制后,为什么 MSB 为 0(正),符号却是负数?

binary decimal twos-complement
1个回答
0
投票

在步骤 1 中,数字对于 8 位二进制补码来说太大。最大的 8 位有符号整数是 127。第 3 步显示,如果将这些数字写入 8 位,则会得到一个负数。转换显示您得到的负数。因此,要知道 11010110 代表哪个数字,请取其补码,然后取反。

© www.soinside.com 2019 - 2024. All rights reserved.