首页 > 解决方案 > 使用 2 的补码计算 8 位数字的加法

问题描述

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

-93 + -35

45 + 114

我的答案:

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

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

第二个问题:

2 的补码中的 45 = 00101101

114 在 2 的恭维= 01101000

45+114 = 10010101

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

标签: cmathcpu-architecturetwos-complement8-bit

解决方案


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

二进制中的 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。


推荐阅读