整数の最大値

2013年02月21日に質問されました。  ·  閲覧回数 965.6k回  ·  ソース

stackuser picture
2013年02月21日

Cでは、整数(32ビットマシンの場合)は32ビットで、範囲は-32,768〜 +32,767です。 Javaでは、integer(long)も32ビットですが、範囲は-2,147,483,648から+2,147,483,647です。

ビット数は同じですが、Javaで範囲がどのように違うのかわかりません。 誰かがこれを説明できますか?

回答

gaborsch picture
2013年02月21日
402

Cでは、言語自体は特定のデータ型の表現を決定しません。 マシンごとに異なります。組み込みシステムでは、 intは16ビット幅ですが、通常は32ビットです。

唯一の要件は、サイズでshort int <= int <= long intことです。 また、 intはプロセッサのネイティブ容量を表すことをお勧めし

すべてのタイプが署名されています。 unsigned修飾子を使用すると、値の一部として最上位ビットを使用できます(それ以外の場合は、符号ビット用に予約されています)。

可能なデータ型の可能な値の短い表を次に示します。

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

JavaではJava言語仕様がデータ型の表現を決定します。

順序は、 byte 8ビット、 short 16ビット、 int 32ビット、 long 64ビットです。 これらのタイプのすべてには、符号なしのバージョンが存在しない、署名されています。 ただし、ビット操作では、数値は符号なしとして扱われます(つまり、すべてのビットが正しく処理されます)。

文字データ型charは16ビット幅で符号なしであり、UTF-16エンコーディングを使用して文字を保持します(ただし、 char 、無効を表す任意の符号なし16ビット整数を割り当てることができます。文字コードポイント)

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535
Kos picture
2013年02月21日
75

Cでは、整数(32ビットマシンの場合)は32ビットで、範囲は-32768〜 +32767です。

違う。 2の補数表現で32ビット符号付き整数の範囲を有する-2 31 31 2 -1 2,147,483,647に-2147483648に等しいです。

Ivaylo Strandjev picture
2013年02月21日
19

32ビット整数の範囲は-2,147,483,648から2,147,483,647です。 ただし、32ビットマシンを使用しているからといって、 Cコンパイラが32ビット整数を使用しているわけではありません。

John Bode picture
2013年02月21日
15

C言語の定義では、さまざまなデータ型の最小範囲を指定しています。 int場合、この最小範囲は-32767〜32767です。つまり、 int少なくとも16ビット幅intタイプを自由に提供できます。 たとえば、私が作業しているSLES 10開発サーバーでは、範囲は-2147483647〜2137483647です。

16ビットのintタイプを使用するシステムはまだいくつかありますが(All The World Is Not A VAX x86)、32ビットのintタイプを使用するシステムはたくさんあります。 64ビットを使用するものはほとんどありません。

C言語は、さまざまなアーキテクチャで実行するように設計されています。 Javaは、これらのアーキテクチャの違いを隠す仮想マシンで実行するように設計されています。

UmNyobe picture
2013年02月21日
8

Java int厳密に相当するのは、Cではlong intです。

編集: int32_tが定義されている場合、精度の点では同等です。 long intは、Java intの精度を保証します。これは、少なくとも32ビットのサイズが保証されているためです。

BlueLettuce16 picture
2013年02月21日
7

これは、32ビットマシンのC整数では、32ビットが格納に使用されることを意味するのではなく、16ビットの場合もあるためです。 マシンによって異なります(実装によって異なります)。

Brill Pappin picture
2013年08月19日
7

ポスターにはJavaタイプが混在しています。 Javaでは、彼のC inは短いです:short(16ビット)= -32768〜32767 int(32ビット)= -2,147,483,648〜2,147,483,647

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Alex picture
2013年02月21日
4

実際、 intshortlongビット単位のサイズは、コンパイラの実装によって異なります。

私のUbuntuの64の例は、私が持っているビットshort32別の32ビットUbuntuのバージョンにそれがあるときに、ビット16ビット。

Achintya Jha picture
2013年02月21日
1

Cでは、__ int32の範囲は–2147483648〜2147483647です。全範囲については、こちらを参照してください。

unsigned short 0 to 65535
signed short –32768 to 32767
unsigned long 0 to 4294967295
signed long –2147483648 to 2147483647

「int」が32ビットになるという保証はありません。特定のサイズの変数を使用する場合、特にビット操作を伴うコードを作成する場合は、「標準整数型」を使用する必要があります。

Javaの場合

intデータ型は、32ビットの符号付き2の補数整数です。 最小値は-2,147,483,648、最大値は2,147,483,647(両端を含む)です。

Emos Turi picture
2017年12月13日
1

実際には理解するのは本当に簡単です。グーグル計算機で計算することもできます。intには32ビットがあり、コンピューターはバイナリであるため、ビット(スポット)ごとに2つの値を持つことができます。 2 ^ 32を計算すると、4,294,967,296が得られます。 したがって、この数値を2で割ると(半分は負の整数で、残りの半分は正であるため)、2,147,483,648になります。 この数値は32ビットで表すことができる最大の整数ですが、注意を払うと、2,147,483,648が2,147,483,647 x 1より大きいことに気付くでしょう。これは、数値の1つが0を表し、残念ながら2 ^の真ん中にあるためです。 32は奇数ではないため、真ん中に1つの数しかないため、正の整数の暗号は1つ少なくなり、負の整数は2,147,483,648の半分になります。

以上です。 言語ではなく、マシンによって異なります。