5

在 7.8.3 中。C# Specification 关于余数运算符的说明如下:

如果左操作数是最小的 int 或 long 值并且右操作数是 -1,则抛出 System.OverflowException。

因此int.MinValue % -1会导致OverflowException。我试图理解为什么?

4

1 回答 1

6

在二进制补码算术中,数据类型的范围从 (-2**n) 到 (2**n - 1)(其中 'n' 比数据类型中的位数少 1)。

例如,一个 16 位有符号整数的有效范围是 -32768 (-2**15) 到 32767 (2**15 - 1)。

-32768 / -1 = +32768 这超出了 16 位有符号整数的有效范围。

于 2015-11-25T23:20:04.770 回答