[英]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不会抛出异常?
来自MSDN:
发生整数溢出时,会发生什么取决于执行上下文,可以检查或取消选中。 在已检查的上下文中,抛出了OverflowException。 在未经检查的上下文中,结果的最高有效位被丢弃并继续执行。 因此,C#为您提供了处理或忽略溢出的选择。
与C一样,C#实际上不会执行上溢/下溢检查,除非明确写入/告知这样做。 因此,没有问题从100...000
减去1并得到011...111
。
int
是二进制补码二进制数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.