c - 使用 2 的补码计算 8 位数字的加法
问题描述
对于下面的加法运算,找出计算机使用 8 位 2 的补码给出的结果:
-93 + -35
45 + 114
我的答案:
第一个问题:128的二进制表示= 10000000
-128(2 对 128 的补码)= 10000000
第二个问题:
2 的补码中的 45 = 00101101
114 在 2 的恭维= 01101000
45+114 = 10010101
我对么?如果没有,有人可以告诉我如何为两者实现正确的解决方案吗?
解决方案
这看起来像家庭作业,所以我不会给你答案,但我可以帮你找到答案。请填空,并回答穿插的问题。
二进制中的 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。
推荐阅读
- angularjs - ReferenceError: newFunction 未定义
- python - 散景:垂直条的宽度不变
- visual-studio - 我可以在 Visual Studio 2017 专业版上使用现有的 Visual Studio 2017 工作负载(来自社区版)吗?
- angular - Angular 5 中的单元测试模型属性绑定
- ajax - 接受 Ext.Ajax.request 中的应用程序/pdf
- javascript - 在本地系统中工作,但在服务器中上传时不工作
- java - 编辑 Java 类文件
- python - 如何在python中对具有特定键值的复杂json进行排序
- oracle - oracle数据库数据从一个到多个相关表同步
- asp.net - 实体框架多对多关系错误