使用两个补码添加两个十进制数

时间:2018-03-23 18:19:47

标签: binary decimal twos-complement

给出问题:

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

讲师的解决方案:

第1步:

以二进制编写两个数字:

214 = 11010110

151 = 10010111

第2步:

使用两个补码表示重写:

214 = 11010110 = 00101010

151 = 10010111 = 01101001

第3步:

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

214 = 11010110 = 00101010 = -105

151 = 10010111 = 01101001 = -42

第4步:

添加:100101010 + 01101001 = 10010011

第5步:

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

结论:可以注意到,存在溢出

我的问题是:

在第1步: 当214和151都为正时,为什么将214和151转换为二进制的结果的MSB等于1(负)?它们的二进制值是不是分别等于011010110和010010111?

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

1 个答案:

答案 0 :(得分:0)

在步骤1中,数字对于8位二进制补码数而言太大。最大的8位有符号整数是127.步骤3显示如果以8位写入这些数字,则得到负数。转换显示您获得的负数。所以要知道11010110代表哪个数字,取两个补码,然后否定它。