C では、整数 (32 ビット マシンの場合) は 32 ビットで、範囲は -32,768 から +32,767 です。Java では、整数 (long) も 32 ビットですが、範囲は -2,147,483,648 から +2,147,483,647 です。
ビット数は同じなのに、Java では範囲が異なる理由がわかりません。誰か説明してもらえますか?
ベストアンサー1
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言語仕様データ型の表現を決定します。
順序は、byte
8 ビット、short
16 ビット、int
32 ビット、long
64 ビットです。これらの型はすべて符号付きで、符号なしバージョンはありません。ただし、ビット操作では、数値は符号なしとして扱われます (つまり、すべてのビットが正しく処理されます)。
文字データ型はchar
16ビット幅、符号なしchar
であり、UTF-16エンコードを使用して文字を保持します(ただし、無効な文字コードポイントを表す任意の符号なし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