it-swarm.com.de

Maximaler Wert der Ganzzahl

In C ist die Ganzzahl (für 32-Bit-Computer) 32 Bit und reicht von -32.768 bis +32.767. In Java ist die Ganzzahl ebenfalls 32 Bit, reicht jedoch von -2.147.483.648 bis +2.147.483.647.

Ich verstehe nicht, wie sich der Bereich in Java unterscheidet, obwohl die Anzahl der Bits gleich ist. Kann das jemand erklären?

259
stackuser

In C bestimmt die Sprache selbst nicht die Darstellung bestimmter Datentypen. Dies kann von Maschine zu Maschine unterschiedlich sein. Auf eingebetteten Systemen kann int eine Breite von 16 Bit haben, normalerweise jedoch 32 Bit.

Die einzige Voraussetzung ist, dass short int <= int <= long int nach Größe. Es gibt auch eine Empfehlung, dass int die native Kapazität des Prozessors darstellen soll .

Alle Typen sind signiert. Mit dem Modifikator unsigned können Sie das höchste Bit als Teil des Werts verwenden (andernfalls ist es für das Vorzeichenbit reserviert).

Hier ist eine kurze Tabelle der möglichen Werte für die möglichen Datentypen:

          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 bestimmt die Java Language Specification die Darstellung der Daten Typen.

Die Reihenfolge ist: byte 8 Bits, short 16 Bits, int 32 Bits, long 64 Bits. Alle diese Typen sind mit Vorzeichen versehen , es gibt keine vorzeichenlosen Versionen. Bei Bitmanipulationen werden die Zahlen jedoch als vorzeichenlos behandelt (dh, alle Bits werden korrekt behandelt).

Der Zeichendatentyp char ist 16 Bit breit, ohne Vorzeichen und enthält Zeichen mit UTF-16-Codierung (es ist jedoch möglich, ein char zuzuweisen. eine beliebige vorzeichenlose 16-Bit-Ganzzahl, die einen ungültigen Zeichencodepunkt darstellt)

          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
351
gaborsch

In C ist die Ganzzahl (für 32-Bit-Computer) 32-Bit und reicht von -32768 bis +32767.

Falsch. 32-Bit-Ganzzahl mit Vorzeichen in der 2-Komplement-Darstellung hat den Bereich -231 zu 231-1, was -2.147.483.648 bis 2.147.483.647 entspricht.

70
Kos

Eine 32-Bit-Ganzzahl reicht von -2.147.483.648 bis 2.147.483.647. Die Tatsache, dass Sie sich auf einem 32-Bit-Computer befinden, bedeutet jedoch nicht, dass Ihr Compiler C 32-Bit-Ganzzahlen verwendet.

18

Die C-Sprachdefinition gibt Minimum Bereiche für verschiedene Datentypen an. Für int beträgt dieser Mindestbereich -32767 bis 32767, dh, int muss mindestens 16 Bit breit sein. Es steht einer Implementierung frei, einen breiteren int -Typ mit einem entsprechend größeren Bereich bereitzustellen. Auf dem SLES 10-Entwicklungsserver, an dem ich arbeite, liegt der Bereich beispielsweise zwischen -2147483647 und 2137483647.

Es gibt immer noch einige Systeme, die 16-Bit-Typen int verwenden (All The World Is NotVAX x86), aber es gibt viele, die 32-Bit-int -Typen verwenden, und vielleicht einige, die 64-Bit verwenden.

Die C-Sprache wurde für verschiedene Architekturen entwickelt. Java wurde entwickelt, um in einer virtuellen Maschine ausgeführt zu werden, die diese architektonischen Unterschiede verbirgt.

13
John Bode

Die Java -Typen des Posters sind vertauscht. In Java ist sein C in ein Short: Short (16 Bit) = -32768 bis 32767 Int (32 Bit) = -2.147.483.648 bis 2.147.483.647

http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

7
Brill Pappin

Das strikte Äquivalent von Java int ist long int in C.

Bearbeiten: Wenn int32_t definiert ist, entspricht dies der Genauigkeit. long int garantiert die Genauigkeit von Java int, da eine Größe von mindestens 32 Bit garantiert wird.

6
UmNyobe

Dies liegt daran, dass in C - Integer auf einer 32-Bit-Maschine nicht bedeutet, dass 32 Bit zum Speichern verwendet werden, sondern möglicherweise auch 16 Bit. Das hängt von der Maschine ab (abhängig von der Implementierung).

6
BlueLettuce16

Tatsächlich hängt die Größe in Bits von int, short, long von der Compiler-Implementierung ab.

Z.B. Auf meinem Ubuntu 64-Bit habe ich short in 32 Bits, auf einer anderen 32-Bit-Ubuntu-Version ist es 16 Bit.

4
Alex

Der C-Bereich für __int32 liegt zwischen –2147483648 und 2147483647. Vollständige Bereiche finden Sie hier.

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

Es gibt keine Garantie dafür, dass ein 'int' 32 Bit beträgt. Wenn Sie Variablen einer bestimmten Größe verwenden möchten, insbesondere wenn Sie Code schreiben, der Bit-Manipulationen beinhaltet, sollten Sie die 'Standard Integer Types' verwenden.

In Java

Der Datentyp int ist eine 32-Bit-Zweierkomplement-Ganzzahl mit Vorzeichen. Es hat einen Mindestwert von -2.147.483.648 und einen Höchstwert von 2.147.483.647 (einschließlich).

1
Achintya Jha

Es ist eigentlich sehr einfach zu verstehen, Sie können es sogar mit dem Google-Rechner berechnen: Sie haben 32 Bits für ein int und Computer sind binär, daher können Sie 2 Werte pro Bit (Punkt) haben. Wenn Sie 2 ^ 32 berechnen, erhalten Sie die 4.294.967.296. Wenn Sie diese Zahl durch 2 teilen (weil die Hälfte negative Ganzzahlen und die andere Hälfte positive sind), erhalten Sie 2.147.483.648. und diese Zahl ist die größte Ganzzahl, die durch 32 Bits dargestellt werden kann. Wenn Sie jedoch darauf achten, dass 2.147.483.648 um 1 größer als 2.147.483.647 ist, liegt dies daran, dass eine der Zahlen 0 darstellt, was leider in der Mitte 2 ^ liegt 32 ist keine ungerade Zahl, daher haben Sie nicht nur eine Zahl in der Mitte, sodass die Possitive Integer eine Ziffer weniger haben, während die Negative die komplette Hälfte 2.147.483.648 erhalten.

Und das ist es. Es kommt auf die Maschine an, nicht auf die Sprache.

0
Emos Turi