女士们,先生们,我已经成功地理解了无符号二进制数的加法等 . 然而,这两个补充让我击败..让我用一些例子来解释 .
示例练习题,使用8位有符号整数存储系统执行每个算法,在两个补码下:
1111111
01100001
+ 00111111
----------
10100000 <== My Answer (idk if right / wrong), but i think right.
所以它不超过8位,但我们改变了(正面正面)=负面 . 这必须是溢出,因为标志正在改变,对吧? (我从来不知道MSB的携带和执行MSB的是什么) .
对我来说,真正棘手的部分是以下等式:(负负),实际上等于(负 - 正) .
111111
10111111
+ 10010101
----------
1 | 01010100
所以我认为这应该是错误的,因为当我们丢弃溢出位(在左侧场中输出的1)时,它将8位表示转换为正数,而它应该是负数 . 所以这会导致溢出,不是吗?
以下等式类似:
1111
10001110
+ 10110101
----------
1 | 01000011
可以理解的是,如果我们使用16位等等,那么这些不会溢出,因为符号没有改变,数学是正确的 . 但是,当我们存储这些数字的8位表示时,我们会丢失MSB,这会使符号翻转 .
但是我注意到有关我的理论的一件事是,每当添加两个负数时,MSB显然总是1,因此你总是有一个进位,这意味着你总会有溢出 .
**我认为更合乎逻辑的结论是,我忘记在添加它们之前将第二个否定转换为正面或某些东西,或类似的东西 . 但我在网上试过youtube和各种研究 . TBH,我的教授对整个“沟通”事情很糟糕 . 我会感谢社区给予的任何帮助,所以我可以将这些问题推到更难的材料XD上 .
2 回答
是的,如果丢弃1个进位,则信号溢出 . 不要担心溢出 . 丢弃进位位是正确的 .
重要的是不要将丢弃1位作为翻转符号 . 首先,丢弃进位与翻转符号位不同 . 您可以从负面结果中丢弃进位,但仍然会得到否定答案 . 例如:
最后1个进位被丢弃,但答案的符号不会翻转 .
其次,即使您正在考虑翻转(而不是丢弃)符号位,将其视为翻转符号并不好 . 在符号幅度表示中,翻转符号位将翻转数字的符号 . 但是在一个和两个补码中,否定不仅仅是翻转最左边的位 . 如果你只是翻转一下,你会得到一个非常不同的数字 . 是的,它有相反的标志,但它不是相同的数字 .
是的,你的数学是正确的 .
两个恭维的优雅之处在于,没有对符号位进行任何特殊考虑 . 这两个减法下溢的原因是因为数字的大小已经非常大 .
我们用十进制来做最后两个问题:
最低有符号的8位值为-128,因此它们都下溢 .