使用 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
{
...
}
老实说,这个伪代码偏好可能行不通,但我已经看到这个问题问了很多次,但没有找到任何有用的答案。它可能需要 unsigned
或 unsigned 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
编辑(重要):这个问题比被标记为重复的问题更具体。这是在询问如何使用布尔函数来完成。但现在我知道它不是那样工作的。 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
{
...
}
老实说,这个伪代码偏好可能行不通,但我已经看到这个问题问了很多次,但没有找到任何有用的答案。它可能需要 unsigned
或 unsigned 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