Cでは、整数(32ビットマシン用)は32ビットで、範囲は-32,768から+ 32,767です。 Javaでは、整数も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
In Java、 the Java言語仕様 はデータ型の表現を決定します。
順序は、byte
8ビット、short
16ビット、int
32ビット、long
64ビットです。これらの型はすべてsignedです。符号なしバージョンはありません。ただし、ビット操作では、符号なしの数字として扱われます(つまり、すべてのビットが正しく処理されます)。
文字データ型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ビット符号付き整数の範囲は-231 2まで31-1、2、147、483、648から2、147、483、647に等しい。
32ビット整数は-2,147,483,648から2,147,483,647の範囲です。しかし、あなたが32ビットマシン上にいるという事実は、あなたのC
コンパイラが32ビット整数を使うという意味ではありません。
C言語の定義では、さまざまなデータ型に対して minimum の範囲を指定しています。 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はこれらのアーキテクチャの違いを隠す仮想マシンで動作するように設計されています。
ポスターにはJavaの型が混在しています。 Javaでは、彼のC inは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ビットである可能性があるためです。マシンに依存します(実装依存)。
Javaのint
と厳密に同等なものは、Cのlong int
です。
編集:int32_t
が定義されている場合、それは精度の点で同等です。 long int
は、Javaのint
の精度を保証します。これは、サイズが少なくとも32ビットであることが保証されているためです。
実際には、int
、short
、long
のビット単位のサイズは、コンパイラの実装によって異なります。
例えば。私のUbuntu 64ビットでは32
ビットにshort
がありますが、もう1つの32ビットUbuntuバージョンでは16
ビットです。
それは実際には理解するのが本当に簡単です、あなたはグーグル計算機でそれを計算することさえできます:あなたはintのために32ビットを持ち、そしてコンピュータはバイナリです。 2 ^ 32を計算すると、4,294,967,296になります。したがって、この数を2で割ると(半分が負の整数、残りの半分が正の整数であるため)、2,147,483,648となります。この数字は32ビットで表現できる最大の整数ですが、注意すると2,147,483,648は2,147,483,647より1大きいことに気付くでしょうが、これは数字の1つが0を表しているためです。残念ながら2 ^ 2 32は奇数ではないので、途中に1つの数字しかないので、可能な整数の暗号は1つ少なくなり、負の整数は半分の2,147,483,648になります。
以上です。それは言語ではなくマシンに依存します。
__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ビットになるという保証はありません、 'Standard Integer Types'を使うべきです。
Javaで
Intデータ型は、32ビット符号付き2の補数整数です。最小値は-2,147,483,648、最大値は2,147,483,647です。