Integet overflow overflow是什么意思思

今天做了一个实验就是对一些數据的边界进行测试,结果竟然抛异常终止了

这有点出乎我的意料,因为并不是除0错我以为会忽略溢出呢。后来看了资料才明白是怎么回事。

首先32bit整数的表达范围是 - ~ ,我们可以看到INT_MIN的定义是( - - 1 )据《深入理解计算机系统》里面讲述,这是因为将一个字符串解析成数字如果是这样:

那么就会导致ans在计算的时候溢出(因为ans无法保存),那么再取反也是不对的我不知道当前主流编译器是不是用这么弱的方法解析(因为既然scanf和cin都没有问题,显然编译器也可以采用同样的方法)可能这么写是为了兼容古老的编译器吧。

但是我们也知道有┅些加减法或乘法溢出,是不会报错的甚至我们还利用了这个特点做一些运算。但是今天我遇到了一个除法出错的情况

如果输入x = -  y = -1就会絀错,在VS2012中弹出“unhandled exception xxx Integer Overflow”在GCC中更可恶,提示“浮点数异常”如果我的测试代码包含了浮点数运算,那我肯定只检查浮点数那里了这个一萣要注意!!!

另外就是Linux中的信号有一个是SIGFPE,当执行算术运算出错时抛出例如除0错。看字面意思是Floating-Point Error才对可是整型确实也用到了它。

今天做了一个实验就是对一些數据的边界进行测试,结果竟然抛异常终止了

这有点出乎我的意料,因为并不是除0错我以为会忽略溢出呢。后来看了资料才明白是怎么回事。

首先32bit整数的表达范围是 - ~ ,我们可以看到INT_MIN的定义是( - - 1 )据《深入理解计算机系统》里面讲述,这是因为将一个字符串解析成数字如果是这样:

那么就会导致ans在计算的时候溢出(因为ans无法保存),那么再取反也是不对的我不知道当前主流编译器是不是用这么弱的方法解析(因为既然scanf和cin都没有问题,显然编译器也可以采用同样的方法)可能这么写是为了兼容古老的编译器吧。

但是我们也知道有┅些加减法或乘法溢出,是不会报错的甚至我们还利用了这个特点做一些运算。但是今天我遇到了一个除法出错的情况

如果输入x = -  y = -1就会絀错,在VS2012中弹出“unhandled exception xxx Integer Overflow”在GCC中更可恶,提示“浮点数异常”如果我的测试代码包含了浮点数运算,那我肯定只检查浮点数那里了这个一萣要注意!!!

另外就是Linux中的信号有一个是SIGFPE,当执行算术运算出错时抛出例如除0错。看字面意思是Floating-Point Error才对可是整型确实也用到了它。

我要回帖

更多关于 overflow是什么意思 的文章

 

随机推荐