使用 If 语句检测整数溢出

Detect Integer Overflow Using If Statement

编辑(重要):这个问题比被标记为重复的问题更具体。这是在询问如何使用布尔函数来完成。但现在我知道它不是那样工作的。 This question shows that a + b = c can only be overflow checked if you write if(c - b == a) and that there is no operator independent way of checking.

Once the overflow happened, you cannot detect it

-洛罗

我一直在寻找一种使用 if 语句在 C++ 中检测整数溢出的方法。

可能的伪代码:

#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
{
    ...
}

老实说,这个伪代码偏好可能行不通,但我已经看到这个问题问了很多次,但没有找到任何有用的答案。它可能需要 unsignedunsigned long long,尽管我不一定鼓励使用这些。

编辑:

我想将它与 3 个数字的乘法语句一起使用:

a * a * b

我知道 <math.h> 中有一个 pow 函数,但那是题外话。

我也知道,如果我想要 pow 的准确 int 结果,我会使用:

int(pow(base, index) + 0.5)

这取决于您使用的是哪种操作以及操作数的类型。

例如如果你想在加法后检测溢出,并且两个操作数都是无符号整数,那么如果结果小于两个操作数的和就会发生溢出。

bool overflow;
if (a+b < a)
   overflow = true;
else
   overflow = false;

有符号整数可以参考优秀posthere