标题:如何判断两个内嵌数据(如整型)运算后溢出
只看楼主
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
结帖率:100%
已结贴  问题点数:10 回复次数:5 
如何判断两个内嵌数据(如整型)运算后溢出
问题是这样的:如果有两个整型变量:int a,b;并且赋上了很大值,当a+b时,结果会溢出,那么如何在运行时让程序自己判断这两个数运算后是否结果溢出了呢?具体代码怎么写?或者有什么方法可以通过写代码判断?最好是能写成函数之类的,可以在以后的程序中直接使用,谢谢
搜索更多相关主题的帖子: 溢出 
2009-08-08 17:02
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
得分:0 
加法溢出得负数不会抛出异常,就通过是否负数来判断。
#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;
}
2009-08-08 18:13
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
得分:0 
2楼的,那么如果两个数运算溢出,结果恰好又是正数呢?那样不就不能这样判断了
2009-08-08 18:50
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
得分:5 
呵呵,没想好,以前也没想到这个问题,所以解答仓促了,疏忽了,我又写了一个

#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;  
}
2009-08-08 19:13
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
得分:5 
呵呵,再来负数
#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;  
}
2009-08-08 19:19
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
得分:0 
恩,多谢楼上,这的确是个办法
2009-08-08 19:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-282036-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.222871 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved