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用於取消整型算術運算和轉換的溢位檢查。
以上就是C#難點逐一擊破(7):checked與unchecked的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!