如何在跨越最大整数数据类型值时计算溢出值
本文关键字:数据类型 计算 溢出 整数 跨越 | 更新日期: 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# 参考)