如何在跨越max int数据类型值时评估溢出值

时间:2013-09-07 17:03:34

标签: c#

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

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

1 个答案:

答案 0 :(得分:3)

int使用32位来存储其编号。因此,存储的数量只能很大。您以最大值启动i。因此,当您添加1时,int的基础表示不能保存该数字。这称为溢出。

为什么得到-2147483648,没有任何非常令人满意的答案。当您将1添加到int.MaxValue时,您必须获取某些内容。 {(1}}格式在内存中的副作用(Two's complement)是溢出发生时获得此特定负数的原因。

如果发生这种情况,您可以在可能溢出的操作周围使用int关键字来获取异常。见这里:checked (C# Reference)

checked

要使用此功能,您必须启用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 and Unchecked (C# Reference)