为什么Int32.MinValue - 1返回Int32.MaxValue?

Pet*_*ers 4 c# clr

当我执行以下代码时,我(对我来说)有一些意想不到的行为.

int i = Int32.MinValue;
i--;
if (i == Int32.MaxValue)
{
    Console.WriteLine("i == Int32.MaxValue");
}
i++;
if (i == Int32.MinValue)
{
    Console.WriteLine("i == Int32.MinValue");
}
Run Code Online (Sandbox Code Playgroud)

为什么Int32.MinValue上的-1不会抛出异常?

Ode*_*ded 7

由于下溢值,所以值环绕.

checked如果要抛出溢出/下溢,则需要使用一个部分.

checked关键字用于显式启用整数类算术运算和转换的溢出检查.


And*_*son 5

来自MSDN:

发生整数溢出时,会发生什么取决于执行上下文,可以检查或取消选中.在已检查的上下文中,抛出了OverflowException.在未经检查的上下文中,结果的最高有效位被丢弃并继续执行.因此,C#为您提供了处理或忽略溢出的选择.

链接到MSDN