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

C# 为什么Int32.MinValue-1返回Int32.MaxValue?,c#,clr,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"); } 为什么Int32.MinValue上的-1不引发异常?因为这些值的下溢

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

int i = Int32.MinValue;
i--;
if (i == Int32.MaxValue)
{
    Console.WriteLine("i == Int32.MaxValue");
}
i++;
if (i == Int32.MinValue)
{
    Console.WriteLine("i == Int32.MinValue");
}

为什么Int32.MinValue上的-1不引发异常?

因为这些值的下溢

如果要抛出溢出/下溢,则需要使用节

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

与C一样,C#实际上不会执行溢出/下溢检查,除非明确编写/要求这样做。因此,从
100…000
中减去1并从MSDN中获得
011…111

是没有问题的:

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

int
是一个二进制数