C では、整数 (32 ビット マシンの場合) は 32 ビットで、範囲は -32,768 ~ +32,767 です。Java では、整数 (long) も 32 ビットですが、範囲は -2,147,483,648 から +2,147,483,647 です。
同じビット数でもJavaで範囲が違うのがよくわかりません。誰かがこれを説明できますか?
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 ビット幅のunsignedで、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
C では、整数 (32 ビット マシンの場合) は 32 ビットで、範囲は -32768 から +32767 です。
違う。2 の補数表現の 32 ビット符号付き整数の範囲は -2 31から 2 31 -1 で、これは -2,147,483,648 から 2,147,483,647 に等しくなります。
32 ビット整数の範囲は -2,147,483,648 ~ 2,147,483,647 です。C
ただし、32 ビット マシンを使用しているからといって、コンパイラが 32 ビット整数を使用しているわけではありません。
C 言語の定義では、さまざまなデータ型の最小範囲が指定されています。の場合int
、この最小範囲は -32767 ~ 32767 です。つまり、は少なくとも16 ビット幅でint
なければなりません。実装は、対応するより広い範囲でより広い型を自由に提供できます。たとえば、私が取り組んでいる SLES 10 開発サーバーでは、範囲は -2147483647 から 2137483647 です。int
int
16 ビット型 (All The World Is Not A VAX x86)を使用するシステムはまだいくつかありますが、32 ビット型を使用するシステムはたくさんあり、int
64 ビットを使用するシステムもいくつかあります。
C 言語は、さまざまなアーキテクチャで実行できるように設計されています。Java は、これらのアーキテクチャの違いを隠す仮想マシンで実行するように設計されています。
Java の厳密な同等物はint
Clong int
にあります。
編集:int32_t
が定義されている場合、精度に関しては同等です。long int
java の精度をint
保証します。これは、サイズが少なくとも 32 ビットであることが保証されているためです。
ポスターには、Java タイプが混在しています。Java では、彼の C は short です: short (16 ビット) = -32768 から 32767 int (32 ビット) = -2,147,483,648 から 2,147,483,647
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
これは、C では、32 ビット マシンの整数は、それを格納するために 32 ビットが使用されることを意味するわけではなく、16 ビットである可能性があるためです。マシンに依存します(実装依存)。
実際には、、、のビット単位のサイズはint
、 コンパイラの実装によって異なりますshort
。long
たとえば、私のUbuntu 64ビットでshort
は32
ビット単位で、別の32ビットUbuntuバージョンでは16
ビット単位です。
__int32 の C 範囲は –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 (包括的) です。