举个例子
这个例子是由于int类型的数据太小,以至于容不下所赋值的数据。可能有人会奇怪int.max+1为什么会等于-2147483648。.
主要还是c#中int是由32个二进制数组组成的011111111111111111111111111111111,由于正高位是用于表示正负数,所以int所能表达的最大数是2的31次方-1即2147483647,+1的时候触发了二进制的回绕,即10000000000000000000000000000000,即等于最小的int数。
那么我们怎么强制进行溢出检查呢。
还好C#提供了checked和unchecked来处理溢出检查。
checked
static void Main(string[] args)
{
checked
{
int num = int.MaxValue;
num += 1;
Console.WriteLine(num);
Console.ReadLine();
}
}
将上述代码放到cheked块里面,就会使运行时引发System.OverflowException异常。这样就可以让你的运算更加准确。
当然有的方法我不需要进行溢出检查了,可以使用unchecked。
unchecked
static void Main(string[] args)
{
unchecked
{
int num = int.MaxValue;
num += 1;
Console.WriteLine(num);
Console.ReadLine();
}
}
这样块中溢出的代码就不会引发异常!