Редактировать (ВАЖНО): Этот вопрос был более конкретным, чем вопрос, который был отмечен как дубликат. Это спрашивало, как это сделать с помощью логической функции. Но теперь я знаю, что это просто не работает. Этот вопрос показывает, что a + b = c
может быть проверен только переполнением, если вы пишете if(c - b == a)
и что нет независимого от оператора способа проверки.Обнаружение целочисленного переполнения с использованием оператора If
После переполнения произошло, вы не можете обнаружить его
-lorro
Я искал способ обнаружения целочисленное переполнение в 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
{
...
}
OK, чтобы быть честным, то это предпочтение псевдо-код не может работать, но я видел, этот вопрос задавали много раз и не нашли каких-либо полезных ответов. Это может потребовать unsigned
или unsigned long long
, хотя я не обязательно поощряю их использование.
EDIT:
Я хотел бы использовать его с умножением предложения с 3-мя числами:
a * a * b
Я знаю, что есть pow
функция в <math.h>
, но это не по теме.
Я также знаю, что если я хочу точный int
результат от pow
Я хотел бы использовать:
int(pow(base, index) + 0.5)
http://en.cppreference.com/w/cpp/types/numeric_limits После переполнения произошло, вы не можете обнаружить его - то, что вы можете сделать, это иметь temp var с большей точностью, чтобы вычислить результат, а затем отбросить его, если он находится в numeric_limits. – lorro
На этот вопрос так много ответов. Ниже приведен ответ с использованием целых чисел со знаком: http://stackoverflow.com/a/1514309/4082723 – 2501