可能重复:
在C/C++中检测整数溢出的最佳方法
我试图实现简单的程序,测试整数加法期间是否发生溢出:
#include <climits>
#include <iostream>
#include <string>
using namespace std;
string overflow(long a,long b){
return ((a+b)>UINT_MAX)?"true":"false";
}
int main(){
long a, b;
cout << "enter a and b: ";
cin >> a >> b;
string m = overflow(a,b);
cout << m;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
UINT_MAX=65535 所以我输入了65535和20,但它写了错误为什么?
给定unsigned int a, b,此表达式永远无法评估为true:
(a+b) > UINT_MAX
Run Code Online (Sandbox Code Playgroud)
它之所以不可能true是因为UINT_MAX它是最大的,所以无论什么结果(a+b)都不会超过UINT_MAX,因为这将是一个矛盾.
您试图使用更大的数据类型long来解决这个问题,但实际上并不能保证比intC++ 更大.您可能想要尝试long long(尽管标准C++中不存在此类型).
与Java不同,C++实际上并没有指定每种数据类型的大小,因此声称UINT_MAX=65535并非普遍适用.只有无符号整数以16位保存的处理器才有效.对于32位,UINT_MAX是4294967295.