【问题标题】:Calculate addition of 8-bit numbers using 2's complement使用 2 的补码计算 8 位数字的加法
【发布时间】:2021-09-09 05:58:06
【问题描述】:

对于下面的加法运算,找出计算机使用 8 位 2 的补码给出的结果:

-93 + -35

45 + 114

我的回答:

第一个问题: 128的二进制表示= 10000000

-128(2 对 128 的补码)= 10000000

第二个问题:

2 的补码中的 45 = 00101101

114 在 2 的恭维=01101000

45+114 = 10010101

我说的对吗?如果没有,有人可以告诉我如何为两者实现正确的解决方案吗?

【问题讨论】:

  • 我无法判断它是否正确,因为溢出行为不仅仅由“使用 8 位 2 的补码”来确定。
  • 虽然没有指定输出格式,但在输入以十进制(至少不是二进制)给出时以二进制给出结果可能是错误的。
  • 还有一点是,使用 8 位 2 的补码数字的计算机可能能够模拟其他格式的数字。 (图灵完备机可以)
  • 第一个可能是作者所期望的问题。第二个不是。展示你的作品。
  • 114 base 10 不是 01101000 base 2、2 的补码或其他。

标签: c math cpu-architecture twos-complement 8-bit


【解决方案1】:

这看起来像家庭作业,所以我不会给你答案,但我可以帮你找到答案。请填空,并回答穿插的问题。

二进制中的 45 是 ________[1]
二进制的 114 是 ________[2]

这些都可以用 8 位表示。但是当它们以 8 位表示时,如果解释为 2 的补码,它们会被解释为负数还是正数? (我的猜测是它们应该是正数,因为它们都小于 127,这是可以表示为 8 位 2 补码的最大数。)

现在对 [1] + [2] 进行二进制加法,得到结果 ________[3]

现在,当 [3] 用 8 位表示时,如果解释为 2 的补码,它会被解释为负数还是正数? (如果我用十进制计算,我注意到 45 + 107 是 159,大于 127,所以我猜这里会有一个“问题”。)

最后,[3] 的实际值是多少,解释为 2 的补码?在此处填写:___[4]

[4] 是否等于 159?如果没有,为什么不呢?

如果取[4],去掉减号转为正数(即取绝对值),再加上(作为普通数)159,会得到什么?这个数字是不是很眼熟?


现在,到另一个问题。

找出 -93 的 8 位 2 的补码表示:________[5]
找出 -35 的 8 位 2 的补码表示:________[6]

作为一个附带问题,只是为了好玩,将 [5] 解释为一个普通的(不是 2 的补码)8 位二进制数。 (因此它将是一个正数。)答案:___[7]

对 [6] 执行相同操作。答案:___[8]

计算(使用普通算术)[7] + 93。这个数字看起来很熟悉吗?

计算(使用普通算术)[8] + 35。这个数字看起来很熟悉吗?

现在将 [7] 和 [8] 以二进制形式相加:_________[9]。结果有多少位?超过8个吗?

如果超过 8 位,丢弃最高位,留下 8 位:________[10]

将[10]解释为一个普通的二进制数,它是什么? ___[11]

将 [10] 解释为 2 的补数,它是什么? ___[12](这有点棘手,小心。)

最后,如果你用普通算术做题,-93加-35等于[12]吗?


如果您仍然感到迷茫,可以考虑以下几个不同的示例。让我们看看数字 37。

二进制37是00100101
00100101 的二进制补码是 11011011
所以二进制补码中的 -37 是 11011011

另外,作为一种双重检查,请注意,如果我们将 11011011 作为普通二进制数,则它是 219。然后注意 256 - 37 = 219。

现在,让我们做一个简单的加法问题。我将在三列中显示它:(A)、(B) 和 (C)。 (B) 列是二元的。 (A) 列是 (B) 列中的二进制数,解释为 2 的补码。 (C) 列是 (B) 列中的二进制数,解释为普通数(不是 2 的补码)。

此外,8 位和溢出,因此有两种不同的“底线”:完整的 9 位和,以及丢弃第 9 位或进位后的和。

   (A)         (B)        (C)
    50       00110010      50
+  -37    +  11011011   + 219
   ---      ---------     ---
  (n/a)     100001101     269
    13       00001101      13

还有一件事:注意 269 - 13 = 256。

【讨论】:

  • 二进制的45是:101101,二进制的114是:1110010。加法得到11011111,作为2的补码是00100001。十进制是33。不知道从这里去哪里@SteveSummit
  • @JohnGoldstein 麻烦是,101101 + 1110010 不是 11011111。所以请再试一次。
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
相关资源
最近更新 更多