Я столкнулся с некоторыми странными результатами с целым делением на C++. Я пытаюсь вычислить это: -2147483648/-1.Как работает целочисленное деление C++ для предельных и отрицательных значений?
Что я получаю 3 разные результаты в 3-х различных сценариев:
int foo(int numerator, int denominator) {
int res = numerator/denominator; // produces SIGFPE, Arithmetic exception interrupt
cout << res << endl;
}
int main() {
int res = -2147483648/-1;
cout << res << endl; // prints -2147483648
cout << -2147483648/-1 << endl; // prints 2147483648
foo(-2147483648, -1);
return 0;
}
Почему операция целочисленного деления производит различные результаты в различных ситуациях?
Стоит упомянуть, что код не компилируется на Windows VS-2015, говоря «отрицательная интегральная константа, преобразованная в неподписанный тип \t» и «унарный минус», примененный к неподписанному типу, результат все равно unsigned' на всех строках '-2147483648/-1' –
Простой ответ [здесь] (http://stackoverflow.com/a/29355979/1460794). – wally
Вот как это делает визуальная студия: '#define INT_MIN (-2147483647 - 1) // минимальная (подписанная) int value' – wally