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

Dir*_*uss 5 c# overflowexception modulus

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

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

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

kei*_*hmo 6

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

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

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

  • 数学上`int.MinValue%-1`将为0或-1(或可能为1).这不超过16位有符号整数的有效范围. (2认同)
  • 但它通常通过先划分然后找到余数来计算. (2认同)