[解決済み] 64ビットの符号なし整数はどのくらいの大きさになりますか?
2022-03-04 09:52:19
質問
については、かなりはっきりしています。 64bitの符号付き整数はどのくらいの大きさになりますか? この質問とそのわかりやすい回答に感謝します。
ということは、それによれば
unsigned int
は、2^63 - 1ではなく、2^64 - 1になり得るのでしょうか?
2^63 - 1: 0111111111111111111111111111111111111111111111111111111111111111
2^64 - 1: 1111111111111111111111111111111111111111111111111111111111111111
もし、私が正しく理解できたとしたら、符号なしオーバーフローはどのように検出できますか?2の補数表現の符号付き整数のオーバーフローは、最上位ビット位置を侵し、負の数を返します。しかし、この符号なしの場合はどうでしょうか?
解決方法は?
値を見ただけでは判別しにくい、もしくは判別できない。
問題は、最大値に加え、たった1でも有効な値、つまり0であることです。
このため、ほとんどのプログラマは、実際に間違った値である場合は、できるだけ避けるようにしています。アプリケーションによっては、折り返しがロジックの一部であり、問題ない場合もあります。
例えば、次のような計算をする場合。
c=a+b;
(a, b, c は 64bit 符号なし int で、a, b は心配なほど max に近い、あるいはそうなるかもしれない) そして、結果が影響を受けるかどうか調べたい。
であれば
((max - b) < a)
とともに
max
はコンパイラが提供する適切なシンボルです。
最大値を2^64-1として自分で計算しないでください、実装やプラットフォームに依存します。その上、2回の折り返しが含まれます (2^64は最大値を超えているので、おそらく0です。そして1を引くと0を経由して戻ります...)。そして、これは
^
は、"to power of"の適切なバージョンであると理解されています。
関連
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】strcmpが機能しない
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み] 64bitの符号付き整数はどのくらいの大きさになりますか?