怎么判断两int型变量运算后是否出现溢出
两个int型变量,做加、减、乘运算,怎么判断结果是否会溢出int允许的范围?
[解决办法]
相加的结果与其中一个数相减,与另一个数比较看是否相等
这样行不?
[解决办法]
#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的类