Entries

スポンサーサイト

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

型変換によるオーバーフロー

タグ: C++

型変換でオーバーフローしたときの動作が未定義なのかそうでないのかの知識が曖昧だったので、JISX3010:2003を見ながら簡単にまとめておく。

主なオーバーフローパターンとその挙動


パターン結果
正整数値→符号無し整数型(unsigned short)0x12345678UL0x5678
負数値→符号無し整数型(unsigned short)-65538L65534
正整数値→符号付き整数型(short)0x12345678UL処理系依存
負整数値→符号付き整数型(short)-65537L処理系依存
実浮動小数値→整数型(short)65536.0未定義

整数値から符号無し整数型への変換

規格では

新しい型で表現しうる最大の数に1加えた数を加えること又は減じることを、新しい型の範囲に入るまで繰り返すことによって得られる値

となっている。
面倒くさい言い回しだが、要は「入りきらない上位バイトをカットし、下位バイトをそのまま使用する」ということ。

整数値から符号付き整数型への変換

このパターンでオーバーフローが発生した場合の動作は処理系依存
符号無し整数型同様上位バイトを削られるだけかもしれないし、シグナルを生成されるかもしれない。


実浮動小数値から整数型への変換

このパターンでオーバーフローが発生した場合の動作は未定義
新しい型が「符号無し整数型」でも未定義。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/3-23416bd5
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

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