Результат (int) -2147483648, деленный на (int) -1, используя разные компиляторы?

Как мы все знаем, наименьшее целое число зависит от компилятора, поэтому у меня есть этот вопрос: каков результат  `(int) -2147483648` , деленный на  `(int) -1`  вы получаете, когда используете разные компиляторы? Например, VC6.0, VS2010 и т. Д.?

Сначала предположим, что мы находимся в 32-битной системе  ``с двумя представлениями дополнения, где  `INT_MIN`  значение совпадает с  `-INT_MAX - 1` .``

``Это выражение:

 `(int) -2147483648/(int) -1` 

эквивалентно

 `(int) -2147483648/-1` 

поскольку  `-1`  уже имеет тип  `int` .

В системе дополнений  `32-bit` , где  `INT_MAX`  находится  `2147483647` , значение  `2147483648`  имеет тип  `long`   1) , поскольку он не может быть представлен в  `int` . Значение  `-2147483648`  также имеет тип  `long` .

Значение  `long`   `-2147483648`  может быть представлено в  `int` , а значение после целочисленного преобразования  `(int) -2147483648`  является  `INT_MIN` .

Исходное выражение тогда эквивалентно (по нашим предположениям):

 `INT_MIN/-1` 

and this expression эквивалентно `INT_MAX + 1` which is not representable in an `int`. Indeed `int` type range goes from `INT_MIN` to `INT_MAX`. The expression is an integer overflow and integer overflow invokes undefined behavior in C.

>  (C99, 6.5p5) «Если при оценке выражения возникает исключительное условие (то есть, если результат не определен математически или нет в диапазоне представляемых значений для его типа), поведение не определено. «
> 
> 

---

1) We implicitly assume `LONG_MAX` is `> INT_MAX`, otherwise the value `2147483648` is of type `long long`.``