繁体   English   中英

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

[英]Why does Int32.MinValue - 1 return Int32.MaxValue?

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

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部分。

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

来自MSDN:

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

链接到MSDN

与C一样,C#实际上不会执行上溢/下溢检查,除非明确写入/告知这样做。 因此,没有问题从100...000减去1并得到011...111

int是二进制补码二进制数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM