2017-10-13 5 views
-2

私は4バイトのunsigned intを持っていますが、私は2^32の値を持っています。C++の符号なし整数 - > 2^n - 1の最大値はなぜですか

最大値は4294967296(2^32)なので、代わりに4294967295(2^32-1)となるのはなぜですか?

+6

32ビットで表現できる「2^32」の別個の値があります。「0」から「2^32-1」 –

+3

ゼロで始まるからです。 0から2^32-1まで正確に2^32の値があります。 – arrowd

+1

私は人類がゼロを無視する長い歴史を持っていることを知っています。しかし、あなたはプログラマーです。もっとうまく行こう。 –

答えて

3

これは単なる基本的な計算です。この例を見てください:

もし1ビット長の整数を持っていたら、最大値は?

あなたの言うことによると、2^1 = 2であるはずです。どのようにして1ビットで2の値を返すでしょうか?

0

2^1は2ビットを占有します。 2^32は33ビットを占有します。

ただし、32ビットしかありません。したがって、2^32 - 1

0

基本数学。

ビットは2の値を表すことができます。 nビットのセットは、2^nを表すことができます(^を "力の羅列"を表すために使用します。ビット演算はC++のデフォルトの意味ではありません)。

unsignedの整数型の変数は、0の連続する整数値とその型が表すことのできる最大値の間のすべての連続値を含むシーケンスを表します。連続値の合計数が2^nで、そのうちの最初の値がゼロの場合、そのタイプは2^n - 1の連続する正の(ゼロ以外の)値を表すことができます。したがって、最大値は2^n - 1でなければなりません。

0

2ビット整数の場合、0からまでカウントが開始されるため、4つの異なる値を設定できます。 (0,1,2,3)すなわち0 2^2 -

(00,01,10,11)1.

同様あなたが最大値を有することができ、32ビット整数のための2^32として - 1.

関連する問題