- UID
- 62930
注册时间2009-7-24
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2024-12-6 17:12 |
---|
签到天数: 6 天 [LV.2]偶尔看看I
|
判断二个数相加是否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;
} |
|