У меня есть назначение, чтобы вывести некоторые, казалось бы, странные поведения кода C (работает на x86). Я могу легко закончить все остальное, но это меня действительно смутило.
Фрагмент кода 1 выходы
-2147483648
int a = 0x80000000; int b = a / -1; printf("%d\n", b);
Фрагмент кода 2 не выводит ничего и дает
Floating point exception
int a = 0x80000000; int b = -1; int c = a / b; printf("%d\n", c);
Я хорошо знаю причину результата Code Snippet 1 (1 + ~INT_MIN == INT_MIN
), но я не могу понять, как целое деление на -1 генерирует FPE, и я не могу воспроизвести его на своем телефоне Android (AArch64, GCC 7.2.0). Код 2 просто выводит то же, что и Code 1 без каких-либо исключений. Является ли это скрытой функцией ошибка для процессора x86?
Назначение ничего не говорило (включая архитектуру ЦП), но поскольку весь курс основан на настольном Linux-дистрибутиве, вы можете смело считать его современным x86.
Изменить. Я связался с моим другом, и он проверил код на Ubuntu 16.04 (Intel Kaby Lake, GCC 6.3.0). Результат был согласован с тем, что было указано назначением (код 1 выводит сказанное, а код 2 - с FPE).