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

本文关键字:Int32 MaxValue 返回 MinValue-1 为什么 | 更新日期: 2023-09-27 17:59:42

当我执行以下代码时,我有一些意外的行为。

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不引发异常?

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

由于下溢,值会换行。

如果要引发溢出/下溢,则需要使用checked节。

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

来自MSDN:

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

MSDN 的链接

C#和C一样,除非明确写入/告知,否则实际上不会进行上溢/下溢检查。因此,从100...000减去1并获得011...111是没有问题的。

int是一个2的补码二进制数。

相关文章: