1. ホーム
  2. c

[解決済み] 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"の適切なバージョンであると理解されています。