2010年2月17日水曜日

int.MaxValue(int型の最大値)にインクリメント演算子で1を加えてOverflowさせ、try-catch-finally(例外処理)で既定ではOverflow(桁あふれ)の例外がthrowされずにint.MinValue(int型の最小値)になることを、checked keywordを使用してchecked文のブロック内に同じ処理を記述し、checked文ではOverflow(桁あふれ)の例外が検出されてthrowされることを確認してみる。

using System;

class MainClass
{
    static void Main()
    {
        try
        {
            int n = int.MaxValue;

            // 出力値:(int型の最大値)
            Console.WriteLine(n);

            /* Overflow(例外はthowされない)
             * int.MinValueになる */
            n++;

            // 出力値:(int型の最小値):True
            Console.WriteLine
                ("{0}:{1}", n, n == int.MinValue);

            // 強制的にOverflowの例外をthowする
            checked
            {
                int m = int.MaxValue;

                Console.WriteLine(m);

                // ここで桁あふれの例外発生
                m++;

                Console.WriteLine
                    ("{0}:{1}", n, n == int.MinValue);
            }
        }

        catch (Exception error)
        {
            // 例外の原因の詳細情報を表示
            Console.WriteLine(error.Message);
        }

        finally
        {
            Console.WriteLine("終了");
        }
    }
}

0 コメント:

コメントを投稿