使用If语句检测整数溢出

时间:2016-06-30 07:10:45

标签: c++ error-handling int overflow detection

修改(重要):此问题比标记为重复的问题更具体。这就是问如何用布尔函数来做。但现在我知道它并没有像那样工作。此问题表明a + b = c只能在您编写if(c - b == a)并且没有运算符独立的检查方式时进行溢出检查。

  

一旦发生溢出,你就无法检测到它

-lorro

我一直在寻找一种使用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

我知道pow中有一个<math.h>功能,但这个主题已经不在了。

我也知道,如果我想要int来自pow的准确int(pow(base, index) + 0.5) 结果,我会使用:

$('#show').on("click", function(){
        $.ajax({
            async: false,
            data: {id: t},
            type: 'POST',
            url: '/get_logs/',
            success: function(result){
                $('#' + content_id).html(result)
                $('#' + show).attr('id',"hide")
            }
        });
 });

1 个答案:

答案 0 :(得分:0)

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

e.g。如果要在加法后检测溢出,并且两个操作数都是无符号整数,那么如果结果小于两个操作数的总和,则会发生溢出。

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

对于有符号整数,您可以参考优秀的帖子here