注册 登录
编程论坛 C++教室

如何判断两个内嵌数据(如整型)运算后溢出

zqsf 发布于 2009-08-08 17:02, 1383 次点击
问题是这样的:如果有两个整型变量:int a,b;并且赋上了很大值,当a+b时,结果会溢出,那么如何在运行时让程序自己判断这两个数运算后是否结果溢出了呢?具体代码怎么写?或者有什么方法可以通过写代码判断?最好是能写成函数之类的,可以在以后的程序中直接使用,谢谢
5 回复
#2
xufen3402009-08-08 18:13
加法溢出得负数不会抛出异常,就通过是否负数来判断。
#include<iostream>
#include<limits>
using namespace std;
int main(int argc,char** argv)
{
   
    int a,b;
    a=numeric_limits<int>::max();
    b=numeric_limits<int>::max();
    int c=(a+b);
    if(c<0) exit(1);
    return 0;
}
#3
zqsf2009-08-08 18:50
2楼的,那么如果两个数运算溢出,结果恰好又是正数呢?那样不就不能这样判断了
#4
xufen3402009-08-08 19:13
呵呵,没想好,以前也没想到这个问题,所以解答仓促了,疏忽了,我又写了一个

#include<iostream>  
#include<limits>  
using namespace std;  
 
const int max=numeric_limits<int>::max();  
void check(int a,int b)
{
    if(b>max-a) cout<<"overflow"<<endl;
    else cout<<(a+b)<<endl;
}
 
 
int main(int argc,char** argv)  
{  
   
    int max,a,b;  
    //编译器最大值
     
    //随便符2个值,使加法
    a=1;
    b=numeric_limits<int>::max();  
    check(a,b);
    a=1;
    b=7;
    check(a,b);
    int j;
    cin>>j;
    return 0;  
}
#5
xufen3402009-08-08 19:19
呵呵,再来负数
#include<iostream>  
#include<limits>  
using namespace std;  
 
const int max=numeric_limits<int>::max();  
void check(int a,int b)
{
     
    if(b>max-a&&a>0) cout<<"overflow"<<endl;
    else cout<<(a+b)<<endl;
}
 
 
int main(int argc,char** argv)  
{  
   
    int max,a,b;  
    //编译器最大值     
    a=1;
    b=numeric_limits<int>::max();  
    check(a,b);
    a=1;
    b=7;
    check(a,b);
    a=-5;
    b=numeric_limits<int>::max();  
    check(a,b);
 
    int j;
    cin>>j;
    return 0;  
}
#6
zqsf2009-08-08 19:54
恩,多谢楼上,这的确是个办法
1