对整数类型执行操作时,其值超出该数据类型的范围时,checked和unchecked运算符可以指定CLR如何处理堆栈溢出:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp11
{
class Program
{
static void Main(string[] args)
{
byte a= 255;
checked
{
a++;
}
Console.WriteLine(a);
Console.ReadKey();
}
}
}
如果把一个代码块标记为checked,CLR就会执行溢出检查,如果发生溢出,就会抛出异常。
如果要禁止溢出检查,可以把代码标记为unchecked:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp11
{
class Program
{
static void Main(string[] args)
{
byte a= 255;
unchecked
{
a++;
}
Console.WriteLine(a);
Console.ReadKey();
}
}
}
此时不会抛出异常,但会丢失数据——因为byte数据类型不能包含256(只包含0~255),溢出的位会被丢掉,并且b变量得到的值是0。