1 有符号数相加溢出判断
1.1 两个有符号的数是正数
当两个有符号整数x,y
同为正数,且x+y
的结果为非正时,发生了正溢出。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
int x;
int y;
scanf("%d %d", &x, &y);
int s = x + y;
if (x > 0 && y > 0 && s < 0) {
cout << "发生了正溢出:符号位的1被覆盖为0" << endl;
}
else {
cout << "没有溢出" << endl;
}
system("pause");
return 0;
}
测试(1)
![](https://img-blog.csdnimg.cn/7e1e3cb7407b4755aa3e5de506f7deeb.png)
测试(2)
![](https://img-blog.csdnimg.cn/72844697a96e4086a1ef4848f3187ae2.png)
1.2 两个有符号的数是负数
当两个有符号整数x,y
同为负数,且x+y
的结果为非负时,发生了负溢出。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
int x;
int y;
scanf("%d %d", &x, &y);
int s = x + y;
if (x < 0 && y < 0 && s > 0) {
cout << "发生了负溢出:符号位的1被覆盖为0" << endl;
}
else {
cout << "没有溢出" << endl;
}
system("pause");
return 0;
}
测试(1)
![](https://img-blog.csdnimg.cn/6b30677d43a447b389890a8e14a59c86.png)
测试(2)
![](https://img-blog.csdnimg.cn/99fcf0369bd244f3a4afeceb91aeb65c.png)
1.3 两个有符号的数是一正一负
一个加数为正,另一个加数为负,或者任意一个加数为0时,不可能有溢出发生。
2 无符号数相加溢出判断
当两个无符号整数x,y
的和s
小于x
或y
时,发生了溢出。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
uint16_t x;
uint16_t y;
cin >> x >> y;
uint16_t s = x + y;
if (s < x) {
cout << "发生了溢出:进位被丢弃" << endl;
} else if (s < y) {
cout << "发生了溢出:进位被丢弃" << endl;
}
else {
cout << "没有溢出" << endl;
}
system("pause");
return 0;
}
测试(1)
![](https://img-blog.csdnimg.cn/a4f3418707674aca8871cdb196931aa4.png)
测试(2)
![](https://img-blog.csdnimg.cn/8448f87cc4f74911a19105377b9eeb31.png)
测试(3)
![](https://img-blog.csdnimg.cn/a25ff7659b97476d91d786dfdd7b0a42.png)
发生溢出后,和s
小于任何一个加数x或者y
,因此拿任何一个判断均可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415222243638.png)
转载:有符号/无符号整数相加溢出的判断方法_持续学习,不断沉淀的博客-CSDN博客_无符号整数溢出判断
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)