测试整数加法中的溢出

dat*_*ili 1 c++

可能重复:
在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,但它写了错误为什么?

pol*_*nts 5

给定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_MAX4294967295.

相关问题

也可以看看