测试整数相加是否溢出

24 浏览
0 Comments

测试整数相加是否溢出

这个问题已经有答案了:

可能的重复问题:

最佳方法检测C/C++中的整数溢出

我尝试实现一个简单的程序来测试整数加法是否会发生溢出:

#include 
#include 
#include 
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;
}

UINT_MAX=65535,所以我输入了65535和20,但它却写了false,为什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

unsigned int a = UINT_MAX;
unsigned int b = 20;
unsigned int c = a+b;
cout << c << endl;
//output
19

已经有一些关于溢出检测的问题在SO上了(例如C/C++中检测整数溢出的最佳方法)。也许你会发现它们有帮助。

0
0 Comments

给定无符号整数 ab,这个表达式永远无法评估为 true

(a+b) > UINT_MAX

它永远不可能是 true,是因为 UINT_MAX 是最大值,所以无论什么结果 (a+b) 是什么,都不能大于 UINT_MAX,因为那将是一个矛盾。

你尝试使用更大的数据类型 long 来绕过这个问题,但实际上这并不保证比 int 大。你可能想尝试使用 long long 替代(尽管这个类型在标准 C++ 中不存在)。

与 Java 不同,C++ 实际上并没有指定每种数据类型必须有多大,因此声称 UINT_MAX=65535 并不是普遍适用的。它只适用于无符号整数所占用的位数为 16 位的处理器。对于 32 位,UINT_MAX4294967295

相关问题

另请参阅

0