Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 什么是整数溢出错误?_Language Agnostic_Integer Overflow - Fatal编程技术网

Language agnostic 什么是整数溢出错误?

Language agnostic 什么是整数溢出错误?,language-agnostic,integer-overflow,Language Agnostic,Integer Overflow,什么是整数溢出错误? 我为什么要关心这样的错误? 有哪些方法可以避免或防止它 来自: 在计算机程序设计中,整数 当执行算术运算时发生溢出 操作尝试创建一个数值 值大于可以使用的值 在可用的 存储空间。例如,将1添加到可以表示的最大值 构成整数溢出。这个 在这些情况下,最常见的结果是 最不重要的是 待处理结果的可表示位 存储(结果称为包装) 特别是在为程序选择适当的数据类型时,您应该注意这一点,否则可能会出现非常微妙的错误。如果您试图使用整数作为值,而该值由于使用的字节数而高于整数的内部结构所能支

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

来自:

在计算机程序设计中,整数 当执行算术运算时发生溢出 操作尝试创建一个数值 值大于可以使用的值 在可用的 存储空间。例如,将1添加到可以表示的最大值 构成整数溢出。这个 在这些情况下,最常见的结果是 最不重要的是 待处理结果的可表示位 存储(结果称为包装)


特别是在为程序选择适当的数据类型时,您应该注意这一点,否则可能会出现非常微妙的错误。

如果您试图使用整数作为值,而该值由于使用的字节数而高于整数的内部结构所能支持的值,则会发生这种情况。例如,如果最大整数大小为2147483647,并且您尝试存储3000000000,则会出现整数溢出错误。

来源:

当输入整数时,会发生整数溢出 超过其最大值或 降低到超过其最小值。 溢出可以是有符号的,也可以是无符号的


注意:PDF详细解释了溢出和其他整数错误情况,以及如何处理/避免它们。

当操作使整数值大于其最大值时,会发生整数溢出错误

例如,如果可以拥有的最大值为100000,而当前值为99999,则添加2将使其“溢出”


您应该关心整数溢出,因为数据可能会意外更改或丢失,并且可以使用较大的整数类型(请参阅大多数语言中的long int)或将长字符串转换为非常大的整数的方案来避免数据溢出。

解释此问题的最简单方法是使用一个简单的示例。假设我们有一个4位无符号整数。0将是0000,1111将是15。所以如果你增加15而不是得到16,你会回到0000,因为16实际上是10000,我们不能用少于5位来表示它。Ergo溢出

实际上,这些数字要大得多,如果int是有符号的,它会在溢出时循环成一个大的负数,但基本上就是这样


另一种观察方法是把它看成是当汽车里程计在达到999999公里/米后再次滚动到零时发生的同样的事情。

< P>当你试图表达一个大于整数类型所能处理的最大数量的数字时,就会出现整数溢出。< /P> 如果试图用一个字节表示数字300,则会出现整数溢出(最大值为255)。两个字节中的100000也是一个整数溢出(最大值为65535)

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


通过不首先创建条件(通常通过选择足够大的整数类型以避免溢出,或者通过限制用户输入以避免溢出)来避免这种情况。

在内存中存储整数时,计算机将其存储为一系列字节。这些可以表示为一系列的1和0

例如,零将表示为
00000000
(8位整数),通常127将表示为
0111111
。如果将1添加到127,这将“翻转”位,并将其交换为
10000000
,但在表示法中,这实际上用于表示-128。这“溢出”了值

对于无符号数字,同样的情况也会发生:255(
11111111
)加1将变成
100000000
,但由于只有8个“位”,因此最终变成
00000000
,即0


您可以通过对正确的整数大小进行适当的范围检查,或者使用一种为您进行适当异常处理的语言来避免这种情况。

到目前为止,我希望与所有其他答案有点相反,这些答案以某种方式接受了糟糕的数学错误。这个问题被贴上了语言不可知的标签,在很多语言中,整数永远不会溢出,所以我的回答是讽刺的:

什么是整数溢出错误

一个来自黑暗时代的过时的人工制品

我为什么关心它

你没有

如何避免呢


使用整数不会溢出的现代编程语言。(Lisp、Scheme、Smalltalk、Self、Ruby、Newspeak、Ioke、Haskell、随意选择……)

溢出是指算术运算的结果与运算的数据类型不符。如果加上255+1,则字节大小的无符号整数可能会溢出,因为结果(256)不适合字节的8位

如果浮点运算的结果太大,无法在浮点数据类型的指数或尾数中表示,则可能会导致浮点数溢出

当浮点运算的结果太小而无法在给定的浮点数据类型中表示时,也可以对浮点类型进行下溢。例如,如果浮点数据类型可以处理-100到+100范围内的指数,并且将一个值与-80的指数平方,则结果的指数将在-160左右,这不适合给定的浮点数据类型

您需要关注代码中的溢出和下溢,因为它可能是一个无声的杀手:您的代码产生错误的结果,但可能不会发出错误信号

能否安全地忽略溢出在很大程度上取决于程序的性质——从3D数据渲染屏幕像素比财务计算更能容忍数值错误

溢出c