以下代码如何生成输出-2147483648.我知道int.maxvalue是2147483647。
class Program
{
static void Main(string[] args)
{
int i = int.MaxValue;
i += 1;
Console.Read();
}
}
答案 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)