给出问题:
假设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(正数),为什么符号为负?
答案 0 :(得分:0)
在步骤1中,数字对于8位二进制补码数而言太大。最大的8位有符号整数是127.步骤3显示如果以8位写入这些数字,则得到负数。转换显示您获得的负数。所以要知道11010110代表哪个数字,取两个补码,然后否定它。