1、有符号数相加溢出判断:
1、当两个有符号整数x,y
同为正数,且x+y
的结果为非正时,发生了正溢出:
int x;
int y;
int s = x + y;
if (x > 0 && y > 0 && s < 0) {
cout << "发生了正溢出:符号位的1被覆盖为0" << endl;
}
2、当两个有符号整数x,y
同为负数,且x+y
的结果为非负时,发生了负溢出:
if (x < 0 && y < 0 && s > 0) {
cout << "发生了负溢出:符号位的1被覆盖为0" << endl;
}
3、例外情况:一个加数为正,另一个加数为负,或者任意一个加数为0时,不可能有溢出发生。
2、无符号数相加溢出判断:
当两个无符号整数x,y
的和s
小于x
或y
时,发生了溢出。
uint16_t x;
uint16_t y;
uint16_t s = x + y;
if (s < x) {
cout << "发生了溢出:进位被丢弃" << endl;
}
if (s < y) {
cout << "发生了溢出:进位被丢弃" << endl;
}
发生溢出后,和s
小于任何一个加数x/y
,因此拿任何一个判断均可。
证明概括:
详细证明材料: (推荐)两个无符号数相加判断结果是否溢出