什么是整数溢出错误?

Dav*_*vid 15 language-agnostic integer-overflow

什么是整数溢出错误?为什么我关心这样的错误?有哪些避免或预防方法?

Joh*_*ohn 18

当您尝试表示一个大于整数类型可以处理的最大数字的数字时,会发生整数溢出.

如果您尝试在一个字节中表示数字300,则会出现整数溢出(最大值为255).两个字节中的100,000也是整数溢出(65,535是最大值).

你需要关心它,因为数学运算不会像你期望的那样运作.如果有整数溢出,A + B实际上不等于A和B的总和.

您可以通过不首先创建条件来避免它(通常通过选择您的整数类型足够大以至于不会溢出,或者通过限制用户输入以便不会发生溢出).


Kri*_*ris 7

解释它的最简单方法是用一个简单的例子.想象一下,我们有一个4位无符号整数.0将是0000而1111将是15.因此,如果你增加15而不是16,你将回到0000,因为16实际上是10000,我们不能用少于5位表示.Ergo溢出......

在实践中,数字要大得多,如果int已经签名,它会在溢出时循环到一个大的负数,但上面基本上是发生了什么.

另一种看待它的方法是将其视为与汽车中的里程表在达到999999 km/mi后再次翻到零时发生的情况大致相同.