飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1839|回复: 0

[C/C++] [原创]两数相加判断是否overflow

[复制链接]
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-7-29 21:41:58 | 显示全部楼层 |阅读模式
    判断二个数相加是否overflow(都是非负数)
    通常我们判断二个数相加是否overflow都和下面的代码差不多
    if (a + b < 0)
            statement();
    大家可以把以下的代码cp到编译器,看下结果是什么
    #include <stdio.h>
    #include <limits.h>

    void statement()
    {
            printf("OverFlow !\n");
    }

    int main(void)
    {
            int a,b;
            a = ~(int)0;
            b = 4;
            if (a + b < 0)
                    statement();
            return 0;
    }

    可以发现根本达不到判断overflow的效果
    一种方法是将a和b都转成unsigned int型,然后相加,再和~(int)0 >> 1去比较,如果大于的话,就溢出了。
    ~(int)0 >> 1我们可以用limits.h里面的INT_MAX代替。

    #include <stdio.h>
    #include <limits.h>

    void statement()
    {
            printf("OverFlow !\n");
    }

    int main(void)
    {
            int a,b;
            a = ~(int)0;
            b = 4;
            if (((~(int)0) >> 1) - a < b)
            // if (INT_MAX - a < b)
                    statement();
            return 0;
    }
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表