【发布时间】:2018-09-02 12:15:23
【问题描述】:
给定问题:
假设 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(正),为什么符号为负?
【问题讨论】:
-
MSB 为 1,因为值超出了 8 位值 (0..127) 的 有符号 范围。一台计算机不能只是添加另一个位。 ;-)
标签: binary decimal twos-complement