とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【.NET】オーバーフロー例外(OverflowException)が発生しない【C#】

算術演算のインクリメント処理でオーバーフローが発生しても
何事もなかったかのように「1410065407」という数値が入って終了する。

C#の仕様の根本を知らなかったなんて・・・
いままで知らずにコーディングしていたかと思うとゾっとする・・・
たとえばint型をインクリメントするループでぶん回している場合、落ちてるのを知らずに
放置しちゃう可能性だってある。


落ちてよ!!!!
知らずにクルクルしちゃうよ!!

C# プログラマーズ リファレンス
でも読み直した方がよいな。

回避策は以下
/checked (C# コンパイラ オプション)
を使う。
これで、何事があったら例外発生してくれるようになる。

もうひとつが、checked キーワードを使う。
未確認飛行 C オーバーフローのチェック

逆にuncheckedキーワードを使うと、常にオーバーフローを発生させないようにするみたい。
その場合「1410065407」じゃなくって、
演算結果を2の32乗で割ったあまりが入るのだとか。

一応、コードもテストしてみた。
int maxValue = int.MaxValue;
var Value1 = unchecked( maxValue + 1 );
結果retは「-2147483684」になるから、ビットがずれるだけじゃあ?
足りない頭で考えてもダメだから、有効値の範囲ないで動きがあるんだろうね。

乱数値を出すような計算しない限りuncheckedの使い方が思いつかない。
いやぁ。参った。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。