【问题标题】:Arithmetic Overflow算术溢出
【发布时间】:2010-08-02 20:53:07
【问题描述】:

为什么用二进制补码将正数和负数相加时不会发生算术溢出。如果可以请提供一个 8 位有符号整数(字节)的示例。

【问题讨论】:

    标签: numbers overflow math signed


    【解决方案1】:

    这……听起来像是家庭作业。您的意思是使用“作业”标签吗?

    不能溢出的原因是因为添加一个正数x 和一个负数y 将产生一个值z,这样abs(z) < abs(x)abs(z) < abs(y)。由于xy 可以表示为没有溢出,并且z 比任何一个更接近 为零,z 也可以表示为没有溢出。

    任何一对正负数构成一个例子。

    【讨论】:

    • 非常感谢,这正是我想要的。不,这不是作业,我正在编写一个 8086 仿真器。
    【解决方案2】:

    假设您有一个正数 A 和一个负数 B。他们的总和是S。那么:

    S <= A && S >= B
    

    他们的总和会在中间的某个地方。注意会有进位,但这不是溢出(不正确的总和)。

    【讨论】: