[原创]两数相加判断是否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]