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