定点数和浮点数运算溢出判断方法

为了更好地理解定点数和浮点数运算的溢出判断,我们将分别对两种数进行讨论,并提供一些典型案例。

一、定点数运算溢出判断

定点数运算的溢出是指运算结果超出了计算机所能表示的数值范围。主要针对有符号定点数的加减运算。以下三种方法均基于补码运算:

  1. 方法一:符号位比较法

    规则:

    • 只有当两个操作数的符号相同时,才可能发生溢出。
    • 若运算结果的符号位与原操作数的符号位不同,则发生溢出。
    • 若运算结果的符号位与原操作数的符号位相同,则未发生溢出。

    案例 1:溢出

    设机器字长为 8 位(含 1 位符号位)。
    。A 和 B 都为正数,但结果为负数,发生溢出。

    案例 2:未溢出


    (丢弃最高位的进位) . A 和 B 都为负数,结果也为负数,未溢出。

  2. 方法二:进位比较法

    规则:

    • 若运算过程中最高数值位的进位与符号位的进位不相同,则发生溢出。
    • 若相同,则未发生溢出。

    案例 1:溢出 (同方法一案例1)

    1010000000$ 。符号位进位为 0,最高数值位进位为 1,两者不同,发生溢出。

    案例 2:未溢出 (同方法一案例2)

    。符号位进位为 1,最高数值位进位为 1,两者相同,未溢出。

  3. 方法三:变形补码法(双符号位法)

    规则:

    • 变形补码具有两个符号位。
    • 双符号位为 00 时表示正数。
    • 双符号位为 11 时表示负数。
    • 双符号位为 01 时表示正溢出。
    • 双符号位为 10 时表示负溢出。

    案例 1:正溢出 (同方法一案例1)

    . 双符号位为 01,表示正溢出。

    案例 2:未溢出 (同方法一案例2)

    (丢弃最高位的进位) . 双符号位为 11,表示负数,未溢出。

二、浮点数运算溢出判断

浮点数运算的溢出是指运算结果的阶码超出了所能表示的范围。浮点数的溢出与尾数无关,尾数溢出可以通过右规操作进行调整。

规则:

浮点数运算结果是否溢出,主要取决于阶码是否上溢。阶码下溢可以通过非规格化数来表示,而尾数上溢或下溢可以通过左移或右移进行调整。

案例:溢出

设阶码和尾数均采用补码表示,阶码位数为 5 位(含 2 位符号位),尾数位数为 7 位(含 2 位符号位)。基数为 2。
。计算

  1. 对阶:

  2. 尾数相加:

  3. 规格化: 需要右规,变为 .

  4. 阶码 超出了阶码所能表示的最大值 ,发生溢出.

总结:定点数溢出判断关注的是运算结果的数值是否超出表示范围,而浮点数溢出判断关注的是阶码是否超出表示范围。 理解这两种溢出的区别对于正确进行数值运算至关重要.