给出的问题:
假设 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(正),符号却是负数?
在步骤 1 中,数字对于 8 位二进制补码来说太大。最大的 8 位有符号整数是 127。第 3 步显示,如果将这些数字写入 8 位,则会得到一个负数。转换显示您得到的负数。因此,要知道 11010110 代表哪个数字,请取其补码,然后取反。