首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

如何判断两int型变量运算后是否出现溢出

2012-04-11 
怎么判断两int型变量运算后是否出现溢出两个int型变量,做加、减、乘运算,怎么判断结果是否会溢出int允许的范

怎么判断两int型变量运算后是否出现溢出
两个int型变量,做加、减、乘运算,怎么判断结果是否会溢出int允许的范围?

[解决办法]
相加的结果与其中一个数相减,与另一个数比较看是否相等
这样行不?
[解决办法]

C/C++ code
#include <iostream>#include <limits.h>using namespace std;int main(){//若加数与被加数符号相同,而运算结果的符号与操作数的符号(不一致),则表示溢出;    int max = INT_MAX;    int min = INT_MIN;        int result = min + (-1);//修改这里的加数看对应的结果    int result2 = max + 1;//修改这里的加数看对应的结果    if ((min >> (sizeof(int) * 8 - 1) & 1) == (result >> (sizeof(int) * 8 - 1) & 1))    {        cout<<"in the range"<<endl;    }    else    {        cout<<"out the range"<<endl;    }    if ((max >> (sizeof(int) * 8 - 1) & 1) == (result2 >> (sizeof(int) * 8 - 1) & 1))    {        cout<<"in the range"<<endl;    }    else    {        cout<<"out the range"<<endl;    }    return 0;}
[解决办法]
乘法不能那样做,因为可能另外一个数是0.

另外何必这么麻烦呢。。。

用int64计算,然后看结果是否在int32范围内就行了。

在范围内返回结果,不在范围内抛异常啥的。


[解决办法]
int64的话就用double先验证是否超界,不超界再用int64计算值。

或者直接用fp指令计算,80位精度足够了吧

再不行就自己实现个int128的类

热点排行