无符号数是否存在溢出?如何判断?加法如何?减法如何?of,cf的变化如何?有符号数呢?

2025-02-23 05:19:42
推荐回答(2个)
回答1:

无符号数,没有溢出的问题,只有借位.
8位二进制数,可以表示的无符号数,是 0 255.
做加法,超过了 255,就会进位;
做减法,不够减,就会借位;
这些,就是判断准则.
一旦出现进位、借位,CF 就为 1.
有符号数,没有借位的问题,只有溢出.
8位二进制数,可以表示的无符号数,是 -128 +127.
做加法、减法,超出了这个范围,就会溢出.
这就是判断准则.
一旦出现溢出,OF 就为 1.

回答2:

这里说的溢出,是指:数值过大,超出了编码所能表示的范围。

本质上,任何形式的计数,都是有可能溢出的。

比如, 2020 年、2021 年...,我们已经习惯用四位数表示年份。

但是到了 9999 年,再过一年,你如果仍然用四位数表示,就会溢出了。

再如:座机的电话号码,七位转八位,就是为了防止溢出。

---------------------

在 Intel 设计的 CPU 中,有两个标志位:CF、OF(Over Flag)。

每当无符号数的运算出现了溢出,就会有 CF=1,翻译过来就是:进位。

每当有符号数溢出了,则 OF=1,称为 OVER,翻译过来就是:溢出

按照 Intel 的论调,就是说:

  所谓的“溢出”,是特指“有符号数的运算”。

  无符号数的溢出,就不叫溢出了,必须得叫做“进位”

这说法,有些“反人类”哈!

没有办法,人家是大佬嘛,说的对不对,也必须得这么执行。

---------------------

所以,在计算机领域:

  有符号数,才有可能出现溢出的。

    溢出的特征,是“符号位出错”。

      如:正数+正数,却得出了负数、 ... 。


  无符号数,是没有溢出的,它只有“进位借位”

  而有符号数的运算,就不必关心进借位了。