MSDNのドキュメントで、の最大値Int32
は2,147,483,647
16進数であることがわかり0x7FFFFFFF
ました。
もしそうなら、最終的には16進数Int32
であるはずの32ビット整数値を格納する必要があると思います。4,294,967,295
0xFFFFFFFF
私の質問は、なぜInt32
31ビット整数値を格納するのですか?
MSDNのドキュメントで、の最大値Int32
は2,147,483,647
16進数であることがわかり0x7FFFFFFF
ました。
もしそうなら、最終的には16進数Int32
であるはずの32ビット整数値を格納する必要があると思います。4,294,967,295
0xFFFFFFFF
私の質問は、なぜInt32
31ビット整数値を格納するのですか?
符号付き整数だからです。符号なし32ビット整数は、期待する値を提供します。
このMSDNページを確認してください-http://msdn.microsoft.com/en-us/library/exx3b86w(v= vs.80 ).aspx
これがなぜであるかについてのより詳細な説明については、2の補数の表現に関連するジャクソン教皇の回答のリンクをチェックしてください。
また、いくつかのさらなる読書。
符号を格納するために1ビットが使用されるため(Int32はゼロ未満になる可能性があります)。
Int32 と Int64 は両方とも署名されているため、-capacity/2 から (capacity/2)-1 (ゼロの場合) までの整数値を処理できます。これが、最大値が期待した値ではない理由です。ただし、 unsigned int を使用して正の数のみを使用することで、必要なものを取得できます。
あなたは負の数を考慮していません。
Int32
サインを持っています。
MSDNから: http
://msdn.microsoft.com/en-us/library/system.int32.minvalue.aspxMinValue
です-2,147,483,648
; つまり、16進数0x80000000
です。
最初のビットは符号です。int32は符号付きです。つまり、正/負の場合があります(おそらく、「最初の」ビットと言うべきではありません!)