为什么int.MinValue%-1导致和OverflowException

时间:2015-11-25 23:12:24

标签: c# modulus overflowexception

在7.8.3中。关于剩余运算符的C#规范,它声明如下:

  

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

因此int.MinValue % -1会导致OverflowException。我想知道为什么?

1 个答案:

答案 0 :(得分:6)

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

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

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