C#默認情況下,若常數表達式的值超過了目標類型的最大值,將會導致編譯錯誤。
若目標數據類型不能容納非常數表達式的數據,那麼數據在賦值時會被截斷。
代碼如下:
class Program
{
static void Main(string[] args)
{
int n = int.MaxValue;//n=2147483647
n = n + 1;
System.Console.WriteLine(n);
}
}
此時可用內存存儲數據來解釋,之前int.MaxValue在內存為為32位1,自加1後變為32位0,此時0被認為是負號,因此會得來-2147483648。
將上述代碼放在checked塊中,將會引發System.OverflowException類型。
代碼如下:
class Program
{
static void Main(string[] args)
{
checked
{
int m = int.MaxValue;
m = m + 1;
System.Console.WriteLine(m);
}
}
}
C#中放在checked塊內的變量,若運行時發生一次溢出的賦值就會引發一個異常。
unchecked用於取消整型算術運算和轉換的溢出檢查。