math - 8位无符号数加减溢出
问题描述
我很难理解在未单独的加减法中何时发生溢出。例如,
1 1 1 1 0 0 0 0
+ 0 0 1 1 1 0 0 0
__________________
0 0 1 0 1 0 0 0
由于 MSB 中的 1,它导致溢出。我理解这个问题,但是当它进行减法时,我无法确定它何时溢出
例如,
0 0 0 0 0 0 0 1
- 0 0 0 0 0 0 1 1
(应用 2 的补码后)
0 0 0 0 0 0 0 1
+ 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 0
因此结果应该是“没有溢出”,因为最后没有执行 1。但是,答案是“溢出”。你能告诉我为什么吗?
解决方案
我可能会称这个underflow not overflow。
像这样想。您正在尝试计算x - y。使用二进制补码,您将其实现为x + (2 N - y ) = 2 N + ( x - y )。因此,只有在溢出进位位 2 N从左侧掉出时,结果才会正确表示 ( x - y )。否则,您得到的结果是负减法结果的二进制补码表示。