C#使用checked和unchecked处理基元类型执行算术运算可能造成溢出的问题

举个例子

C#使用checked和unchecked处理基元类型执行算术运算可能造成溢出的问题

这个例子是由于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();
            }
        }

C#使用checked和unchecked处理基元类型执行算术运算可能造成溢出的问题

将上述代码放到cheked块里面,就会使运行时引发System.OverflowException异常。这样就可以让你的运算更加准确。

当然有的方法我不需要进行溢出检查了,可以使用unchecked。

unchecked

static void Main(string[] args)
        {
            unchecked
            {
                int num = int.MaxValue;
                num += 1;
                Console.WriteLine(num);
                Console.ReadLine();
            }
        }

C#使用checked和unchecked处理基元类型执行算术运算可能造成溢出的问题

这样块中溢出的代码就不会引发异常!