checkedでオーバーフローをチェック(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
ロリポップ! はコスパのよい初心者向けサーバーです~

オーバーフローとは

データ型で扱える数字の範囲を超えることをオーバーフローと言います。

例えば、byte型は0~255までの数字を扱います。

byte型で宣言した数字が、演算した結果255を超えてしまった場合は、「オーバーフロー」が発生していると言えます。

オーバーフローのことは、桁あふれと呼んだりします。

ソースコード

実行結果

255+1の演算
演算前の値:255
演算後の値:0
0-1の演算
演算前の値:0
演算後の値:255

byte型は8ビットで数字を表現します。つまり2の8乗の256通り。

ここで、2進法で255を表現すると「11111111」となります。これに1を足すと以下のようになります

    11111111
  +00000001
=100000000

byte型だと9桁の数字を扱えないので、255に1を足すと0になるというおかしな結果になります。

checked

オーバーフローを明示的にチェックしたい場合は、checkedを使用します。

checkedキーワードは以下のように記述します。

※1行で済む場合

checked(数値)

※複数行の処理をチェックしたい場合

checked
  {
    オーバーフローが発生しそうな処理文;
  }

ソースコード(1行で済む場合)

実行結果

ハンドルされていない例外: System.OverflowException: 算術演算の結果オーバーフローが発生しました。

以下の文は、int型の最大有効値を示します。

int.MaxValue

 

ソースコード(複数行の処理をチェックしたい場合)

実行結果

int型の最大値は2147483647
ハンドルされていない例外: System.OverflowException: 算術演算の結果オーバーフローが発生しました。

 

逆にオーバーフローを明示的にチェックしない場合は、uncheckedキーワードを使用します。checkedキーワードと使用する際の記述の仕方は同じです

ソースコード

実行結果

int型の最大値は2147483647
int型の最大値+1の値は-2147483648

Visual Studioの設定で対応

オーバーフローが生じるソースコードをVisual Studioでコンパイルした場合、オーバーフローはチェックされません。

ただし、設定を変更すれば、ソースコード上でcheckedキーワードを使用せずとも、オーバーフローを検知できるようになります。

まず、「Properties」を開きます。

 

「ビルド」→「出力」で「詳細設定」をクリック。

「演算のオーバーフローおよびアンダーフローのチェック」の項目にチェックを入れてください。

※この設定で、この記事の一番最初のコードを実行した場合

~ギャンブルに絶対儲かる必勝法があるのだろうか?~

私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。

このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた

     

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)