For faster navigation, this Iframe is preloading the Wikiwand page for 算术溢出.

算术溢出

此条目没有列出任何参考或来源。 (2011年2月24日)维基百科所有的内容都应该可供查证。请协助补充可靠来源改善这篇条目。无法查证的内容可能会因为异议提出而被移除。

算术溢出(arithmetic overflow)或简称为溢出(overflow)指的是:

  1. 电脑领域里所发生的溢出条件是,执行单项数值计算时,当计算产生出来的结果是非常大的,大于寄存器存储器所能存储或表示的能力限制。
  2. 在电脑领域里,执行多项或累计的数值计算时,当计算产生出来的总值是非常大的,大于寄存器或存储器所能存储或表示的能力限制。要注意的是,溢出可能会在其他地址被置换。[来源请求]

加法器中央处理器算术逻辑单元中的核心之一。当长度为n位的两个二进制数经过加减法器运算,得到的长度为n位的结果不是正确值时,我们说发生溢出

检查溢出

大多数的电脑都可以区别以上两种溢出条件。当加法或减法的结果发生进位,必须考量到当运算的数值与结果都是unsigned numbers(无号数值,即“正数”)类型时,运算的结果就不适合使用这个数值类型。所以,在执行无号数值(正数)的加法或减法之后检查进位旗标是非常有用的作法。“溢出”在运算结果为无号数值时容易发生,可以从有符号的运算数值预计出这类的情形(例如:两个正整数相加产生的结果为一个负数)。所以,在执行2的补码的加法或减法之后检查溢出旗标是非常有用的作法(换言之,有考虑到有号数值)。

控制溢出

有几个控制溢出的方法:

  1. 设计:选择正确的资料类型,尤其要注意资料长度与signed/unsigned资料符号。
  2. 回避:事先注意指令的运作以及检查运算的数值,或许可以确保计算出来的结果不会超过存储器存储资料的限制
  3. 控制:当它被侦测到,还有在其他的程序完成时被检测出来,那么溢出是可以被预料的。例如:两个位元大的两个数值做加法计算,这种情形最可能发生。步骤如下:先加低位元再加高位元,但是如果它必须完成低位元的运算,就会产生位元加法的运算溢出,那么就有必要做侦测和增加高位元的总和。通常CPU有支持侦测数值加法大于寄存器大小的作法,基本上这个作法是采用状态位元的方式。
  4. 增值:假如存储的数值过大就会被分配给其他特定的数值,这时溢出就会发生,然后传回旗标值时就会产生连续运作的现象。检查这个问题最有用的方法,就是在整体的计算结尾做一次性的检查工作,而不是检查每一个执行步骤。这个作法最常用在浮点硬件调用浮点运算器
  5. 忽略:这是最普遍的作法,但是这个作法会得出不正确的结果,以及降低程序的安全性

除零计算

任何数除以零的计算(Divided by zero)“不是”算术溢出的一种。在数学上只能明显算是不明确的定义(Undefined);它计算出来的结果只能当成是“没有”值,而不是非常大的无限数值。

相关参见

{{bottomLinkPreText}} {{bottomLinkText}}
算术溢出
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?