当我执行以下代码时,我(对我来说)有一些意想不到的行为。
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不会抛出异常?
答案 0 :(得分:7)
答案 1 :(得分:5)
来自MSDN:
当发生整数溢出时,会发生什么取决于执行上下文,可以检查或取消选中。在已检查的上下文中,抛出了OverflowException。在未经检查的上下文中,结果的最高有效位被丢弃并继续执行。因此,C#为您提供了处理或忽略溢出的选择。
答案 2 :(得分:2)
与C一样,C#实际上不会执行上溢/下溢检查,除非明确写入/告知这样做。因此,从100...000
中减去1并获取011...111
毫无疑问。
答案 3 :(得分:2)
int
是two's complement二进制数。