2

私は32ビットと64ビットを調べていました。±4,294,967,29532ビットに格納できる整数値の範囲はですが、Javaintも32ビットであり(誤解しない限り)、最大。までの値を格納することに気付きました±2 147 483 648。についても同じですが、64ビットlongからの値を格納します。これらの値はどうして違うのですか?0 to ±2^63±2^64

4

3 に答える 3

6

Javaの整数は符号付きであるため、数値が正か負かを表すために1ビットが予約されています。この表現は「2の補数表記」と呼ばれます。このアプローチでは、nビットで表される最大の正の値は次の式で与えられます。

(2 ^(n -1))-1

対応する最小の負の値は次の式で与えられます。

-(2 ^(n --1 ))

正と負の境界に対する「オフバイワン」の側面は、ゼロによるものです。ゼロはスロットを占有し、偶数の負の数と奇数の正の数を残します。表示された値を円のマークとして描くと(文字盤の時間のように)、ゼロは負の範囲よりも正の範囲に属していることがわかります。つまり、ゼロをある種の正として数えると、正の値と負の値の範囲でより対称性が高くなります。

この表現を学ぶために、小さく始めてください。たとえば、3ビットを取り、表現できるすべての数値を書き出します。

  • 0
  • 1
  • 2
  • 3
  • -4
  • -3
  • -2
  • -1

それらの数字のそれぞれを定義する3ビットのシーケンスを書くことができますか?その方法を理解したら、もう1つ試してみてください。そこから、32ビットまたは64ビットまで拡張する方法を想像します。

そのシーケンスは「ホイール」を形成し、それぞれが前に1つ追加することによって形成され、3から-4までのラップアラウンドが示されます。このラップアラウンド効果(減算でも発生する可能性があります)は、「モジュロ算術」と呼ばれます。

于 2011-12-04T20:06:49.420 に答える
2

32ビットでは、2^32の値を格納できます。これらの値を0から4294967295または-2147483648から+2147483647と呼ぶかどうかは、あなた次第です。この違いは「符号付き型」と「符号なし型」と呼ばれます。言語Javaは、の符号付き型のみをサポートしますint。他の言語では、符号なし32ビットタイプとは異なるタイプがあります。

「-」部分には別のビットが必要になるため、±4294967295の32ビットタイプの言語はありません

于 2011-12-04T19:58:53.393 に答える
0

これは、Javaintが署名されているため、署名に1ビットが必要です。

于 2011-12-04T19:59:42.223 に答える