close

對於一些跟錢有關的系統,在數字的計算上要特別小心。在程式設計上,一個變數能存的數目是有範圍的,不可能是無限大,所以會有所謂溢位的問題。

例如下列程式碼:

            int intA = int.MaxValue;
            int intB = intA + 1;
            Console.WriteLine(intB);

 

執行結果。

2012-11-13_233925

 

很明顯的,如果不特別檢查,一旦超過儲存範圍,就會有非預期的值。好在對於整數的檢查,C# 提供 checked 關鍵字。

下列程式碼會檢查整數是否溢位,一旦有溢位的情形,就會丟出 exception。

            try
            {
                int intA = int.MaxValue;
                int intB = checked(intA + 1);
                Console.WriteLine(intB);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

 

執行結果。

2012-11-13_233254

 

另外,也可以宣告 checked 區塊,如果區塊內有任何整數發生溢位的情況,也會丟出 exception。

            try
            {
                checked
                {
                    byte byteA = byte.MaxValue;
                    byte byteB = 2;
                    byte byteC = (byte)(byteA + byteB);
                    Console.WriteLine(byteC);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

 

另外,checked() 內如果放入 byte 型別的變數,編譯是不會過的,所以建議使用 checked 區塊,在程的撰寫上也比較方便。

arrow
arrow
    全站熱搜

    卑微研究生 發表在 痞客邦 留言(0) 人氣()