[解決済み] なぜ無限大=0x3f3f3fなのですか?
質問
ある状況では、一般的に無限大を表すのに十分大きな整数値を使用します。私は通常、表現可能な最大の正負の整数を使用します。オーバーフローを避けるために、事実上すべての算術演算の前にオペランドの1つが無限大であるかどうかをチェックする必要があるため、通常はより多くのコードを生成します。時には、飽和した整数演算を行うことが望ましい場合もあります。そのため、オーバーフローせずに何度も加算や乗算ができるような小さな値を無限大に使用する人もいます。私が興味をそそられるのは、それが(特にプログラミングコンテストで)非常によく見られるという事実です。
const int INF = 0x3f3f3f3f;
なぜその数字が特別なのか?それは、2進数表現が
00111111001111110011111100111111
特に面白い特性は見当たりませんね。入力が簡単なのはわかるが、それが理由ならほとんど何でもいい(0x3e3e3e、0x2f2f2f、など)。オーバーフローすることなく一度だけ追加することができる、それが可能です。
a = min(INF, b + c);
でも、それなら他の定数でもいいんじゃない?ググっても、その定数を使ったコードスニペットがたくさん出てくるだけで、説明やコメントがない。
どなたか見分けられる方いらっしゃいますか?
解決方法は?
この件に関して、いくつかの証拠を見つけました。 こちら ( オリジナルコンテンツ 基本的な考え方は、0x7fffffffはすでに4バイト符号付きintの範囲の最上位なので問題があり、これに何かを加えると負の数、0x3f3f3fになる、というものです。
- はまだかなり大きいです(0x7fffffと同じ桁)。
-
整数の有効範囲がこれより下の数字に限られていると言うなら、これに任意の "有効な正の数" を加えても、無限(つまり、何か
>=INF
). 偶数INF+INF
はオーバーフローしない。これによって、常に "under control" を保つことができます。a+=b; if(a>INF) a=INF;
-
は等バイトの繰り返しなので、簡単に
memset
に詰め込む。INF
; - また、@Jörg W Mittag が上で気づいたように、素敵な ASCII 表現を持っているので、メモリダンプを見ながらその場で発見することも、メモリに直接書き込むことも可能です。
関連
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】strcmpが機能しない
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み】なぜこれらのコンストラクトはプリインクリメントとポストインクリメントを使用して未定義の動作をしているのでしょうか?
-
[解決済み] HTMLによる無限大記号
-
[解決済み] Python Infinity - 注意点はありますか?
-
[解決済み] Rubyで無限大を表現するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】C言語で多重定義を防ぐには?