【发布时间】:2024-01-12 17:11:01
【问题描述】:
编辑(重要):这个问题比被标记为重复的问题更具体。这是在询问如何使用布尔函数来做到这一点。但现在我知道它只是不能那样工作。这个问题表明a + b = c只能在你写if(c - b == a)的情况下进行溢出检查,并且没有独立于操作员的检查方式。
一旦发生溢出,就无法检测到
-罗罗
我一直在寻找一种在 C++ 中使用 if 语句检测整数溢出的方法。
可能的伪代码:
#include <iostream>
#include <...>
using namespace std;
bool isOverflow(...);
int main()
{
int a = INT_MAX + 1;
if (isOverflow(...))
{
cout << "Overflow" << endl;
}
else
{
cout << "No Overflow" << endl;
}
return 0;
}
bool isOverflow
{
...
}
老实说,这个伪代码偏好可能不起作用,但我已经看到这个问题被问了很多次,但没有找到任何有用的答案。它可能需要unsigned 或unsigned long long,尽管我不一定鼓励使用它们。
编辑:
我想将它与 3 个数字的乘法句子一起使用:
a * a * b
我知道<math.h> 中有一个pow 函数,但这是题外话。
我也知道,如果我想要来自 pow 的准确 int 结果,我会使用:
int(pow(base, index) + 0.5)
【问题讨论】:
-
en.cppreference.com/w/cpp/types/numeric_limits 一旦发生溢出,你就无法检测到它——你可以做的是有一个更精确的临时变量来计算结果,然后如果它在 numeric_limits 之内,则将其转换回来。
-
这个问题有很多答案。这是使用有符号整数的答案:*.com/a/1514309/4082723
标签: c++ error-handling int overflow detection