evilknight 发表于 2009-7-29 21:41:58

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

判断二个数相加是否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;
}
页: [1]
查看完整版本: [原创]两数相加判断是否overflow