Binary 有人能给我解释一下,当最后一个进位和第二个进位不同时,为什么总是发生溢出?

Binary 有人能给我解释一下,当最后一个进位和第二个进位不同时,为什么总是发生溢出?,binary,overflow,Binary,Overflow,我试了四个可能的案例 overflow = c,n ⊕ c,n−1 这似乎有效,但有人能解释或证明原因吗?这么长时间了,我对符号的含义只有模糊的理解。我假设‘c’是进位标志,而‘n’是负标志。那么什么是n-1呢 无论如何,我猜你的答案与两个方向的溢出有关:从负数到正数,从正数到负数。当添加两个具有n位的数字时,结果可能有n+1位。这意味着,通过使用n位作为结果,我们无法表示所有这些位 现在,什么是溢出?如果我们考虑一个带符号的数字,这意味着我们可以通过在MSB上面添加符号位(MSB)来扩展这个

我试了四个可能的案例

overflow = c,n ⊕ c,n−1

这似乎有效,但有人能解释或证明原因吗?

这么长时间了,我对符号的含义只有模糊的理解。我假设‘c’是进位标志,而‘n’是负标志。那么什么是n-1呢


无论如何,我猜你的答案与两个方向的溢出有关:从负数到正数,从正数到负数。

当添加两个具有
n
位的数字时,结果可能有
n+1
位。这意味着,通过使用
n
位作为结果,我们无法表示所有这些位

现在,什么是溢出?如果我们考虑一个带符号的数字,这意味着我们可以通过在MSB上面添加符号位(MSB)来扩展这个数,它们将是相等的。因此,如果这不成立(MSB后面的下一位不等于MSB,在将结果截断为
n
位之前可以检测到的内容),则我们称其为溢出

就像你的例子一样,我们说当两个正数相加得到一个负数(或者两个负数得到正结果)时,就会发生溢出

另外,托马斯·波宁(Thomas Pornin)也解释得很好。

c,n是一个变量(我的意思是c下标n,我真的打不出来)。在这种情况下,n=4,c,n是最高有效位的进位标志,c,n-1是第二最高有效位的进位标志。当需要结转时,设置它们。
                            c,n   c,n-1
-7+2      1001+0010         0     0         
7+2       0111+0010         0     1
-7+(-2)   1001+1110         1     0
7+(-2)    0111+1110         1     1