【问题标题】:adding two decimal number using two's complement使用二进制补码添加两个十进制数
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢!一个问题,当您说“所以要判断 11010110 代表哪个数字,取二进制补码,然后取反。”,您所说的取反是什么意思?
  • 当你补充它时,你会得到 00101010。那是 42。所以 11010110 是 -42。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2015-04-07
  • 2017-02-13
  • 1970-01-01
  • 2014-12-25
  • 2018-12-14
相关资源
最近更新 更多