c++ - C语言中,判断a+b与c的大小,if(a+b > c)为什么会判断错误?

查看:694
本文介绍了c++ - C语言中,判断a+b与c的大小,if(a+b > c)为什么会判断错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题:现定义long long a,b,c ,比较a+b与c 的大小关系,原代码如下:

#include<stdio.h>
int main(){
    int T,i = 1;
    long long a,b,c,res;
    scanf("%d",&T);
    while(T--){
        scanf("%lld%lld%lld",&a,&b,&c);
        printf("a+b:%lld\n",a + b);
        
        //需要把a+b放入res中再与c比较,否则会出现错误,为什么?
        res = a+b;
        if(a > 0 && b > 0 && res < 0)
            printf("Case #%d: true\n",i);
        else if(a < 0 && b < 0 && res >= 0)
            printf("Case #%d: false\n",i);
        else if(res > c)
            printf("Case #%d: true\n",i);
        else 
            printf("Case #%d: false\n",i);
        i++;
    }
}

要像上面这样写才可以,如果if中的判断条件不用res,而是直接用a+b和c比较,比如写成if( a+b >c),在某些情况下判断出错,想请教大家在什么情况下以及为什么会这样?

解决方案

a + b的和过大时,发生溢出了,这里的long long 就是signed long long,溢出之后,按照long long的位数截断,然后再变成十进制数,就可能出现变成负数的情况啊,然后就出错了吧。

这篇关于c++ - C语言中,判断a+b与c的大小,if(a+b &gt; c)为什么会判断错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆