web-dev-qa-db-ja.com

Int32の最大値が0x7FFFFFFFなのはなぜですか?

MSDNドキュメントで Int32の最大値は2,147,483,647である 、16進数0x7FFFFFFFであることを確認しました。

Int32の場合、最終的に4,294,967,295と16進数0xFFFFFFFFになる32ビット整数値を格納する必要があると思います。

私の質問は、Int32が31ビット整数値を保存する理由です。

23

それは符号付き整数だからです。符号なし32ビット整数は、期待する値を提供します。

このMSDNページを確認してください- http://msdn.Microsoft.com/en-us/library/exx3b86w(v = vs.80).aspx

なぜこれがジャクソン・ポープスの2つの補数表現に関連する回答のリンクをチェックアウトするのかについての詳細な説明については、.

また、いくつかの さらに読む

34
Lloyd

符号を格納するために1ビットが使用されるため(Int32は0未満になる場合があります)。

http://en.wikipedia.org/wiki/Two%27s_complement

8
Jackson Pope

Int32とInt64は両方とも符号付きなので、-capacity/2から(capacity/2)-1(ゼロの場合)までの整数値を処理できるため、最大値は期待したものではありません。しかし、正の数のみを持つように符号なし整数を使用すると、必要なものを取得できます。

6
marcnc27

あなたは負の数を考慮していません。 Int32サインがあります。

MSDNから: http://msdn.Microsoft.com/en-us/library/system.int32.minvalue.aspxMinValue-2,147,483,648;つまり、16進数の0x80000000

5
888

最初のビットは符号です-int32は符号付きです。つまり、正/負になります(おそらく「最初の」ビットと言ってはいけません!)

5
Charleh

2の補数の符号付きnビット型では、範囲は-2からn-1 2へn-1-1 nビットで2を表現できるためn 異なる値。その半分は符号ビットのために符号付き数値に使用されます。残りの2n-1 halfは、負でない数に使用されます。 1つは0に使用されるため、2つしかありませんn-1-1残りの正数の値

1
phuclv