2

下面的代码如何生成输出 -2147483648。我知道 int.maxvalue 是 2147483647。

     class Program
        {
            static void Main(string[] args)
            {
                int i = int.MaxValue;
                i += 1;
                Console.Read();
            }
        }
4

1 回答 1

3

使用int32 位存储其编号。因此存储的数量只能这么大。你从i最大值开始。因此,当您添加 1 时,底层表示int不能容纳该数字。这称为溢出。

对于你为什么得到 . 没有任何非常令人满意的答案-2147483648。当你添加1到时int.MaxValue,你必须得到一些东西。这种方式的副作用int是在内存中格式化(二进制补码)是发生溢出时得到这个特定负数的原因。

如果发生这种情况,您可以在checked可能溢出的操作周围使用关键字来获取异常。请参见此处:选中(C# 参考)

class Program
{
    static void Main(string[] args)
    {
        int i = int.MaxValue;
        try
        {
            checked
            {
                i += 1;
            }
            Console.WriteLine(i);
        }
        catch (OverflowException e)
        {
            Console.WriteLine("Overflow!");
        }
    }
}

要使用它,您必须启用/checked编译器选项。请参见此处:选中和未选中(C# 参考)

于 2013-09-07T17:06:16.960 回答