如何在跨越最大整数数据类型值时计算溢出值

本文关键字:数据类型 计算 溢出 整数 跨越 | 更新日期: 2023-09-27 18:30:41

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

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

如何在跨越最大整数数据类型值时计算溢出值

int使用 32 位来存储其编号。因此,存储的数字只能这么大。您从最大值开始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# 参考)