![1e2a5188cc45436b0e6b1584e27657f8.png](https://i-blog.csdnimg.cn/blog_migrate/342631f5439f6df2f38e43ae559e49d2.jpeg)
以C语言中的int为例。
方法1:上溢必定是两个正数相加,结果超过INT_MAX,导致结果变成负数。下溢同理。
方法2:上溢必定是两个正数相加,结果超过INT_MAX。因此我们可以用a + b > INT_MAX来判断上溢。但是因为其结果超出一个int能表达的范围,所以只好对原式(加法形式)进行变形,得到减法形式a > INT_MAX - b。下溢同理。
#include <limits.h>
int isAddOverflow(int x, int y)
{
// 1.
int sum = x + y;
return (x > 0 && y > 0 && sum < 0) || (x < 0 && y < 0 && sum > 0);
// 2.
return (x > 0 && y > INT_MAX - x) || (x < 0 && y < INT_MAX - x);
// x==0 won't cause overflow/underflow
}
题图来自:CSC 110 MODULE 3.2