Ganzzahlige Datentypen haben verschiedene Wertebereiche, die von der Anzahl der Bits abhängen. Hier sind einige Beispiele:
byte
- Wertebereich: -128 bis +127
- Konstante min: Byte.MIN_VALUE
- Konstante max: Byte.MAX_VALUE
short
- Wertebereich: -32768 bis +32767
- Konstante min: Short.MIN_VALUE
- Konstante max: Short.MAX_VALUE
char
- Wertebereich: 0 bis 65535 (Sonderfall!)
- Konstante min: Character.MIN_VALUE
- Konstante max: Character.MAX_VALUE
int
- Wertebereich: -2147483648 bis +2147483647
- Konstante min: Integer.MIN_VALUE
- Konstante max: Integer.MAX_VALUE
long
- Wertebereich: -9223372036854775808 bis +9223372036854775807
- Konstante min: Long.MIN_VALUE
- Konstante max: Long.MAX_VALUE
Die maximalen und minimalen Werte der Ganzzahltypen ergeben sich aus der Anzahl der Bits und der internen binären Präsentation. Hier ist ein Beispiel für den 8-Bit Typen Byte:
Java verwendet das Zweierkomplement zur Darstellung negativer Ganzzahlen. Dadurch kann das Vorzeichenbit bei Additionen und Subtraktionen wie ein reguläres Bit behandelt werden. Ein gutes Beispiel dafür ist die Zahl -1. Wenn man -1 (Binärdarstellung 11111111) mit 1 (Binärdarstellung 00000001) addiert, ergibt sich durch den Übertrag eine 0 (Binärdarstellung 00000000).
Der Typ char ist eigentlich ein Zahlentyp, er erfordert jedoch die Eingabe eines beliebigen Zeichens. Der Wertebereich und die Benutzereingabe unterscheiden sich von denen des Typs short.
Um Fließkommazahlen darzustellen, verwendet Java den Standard IEEE 754. Es gibt zwei Fließkomma-Standarddatentypen:
float
- Wertebereich: -3.410^38 bis +3.410^38
- Dezimalstellen in Mantisse: 7
double
- Wertebereich: -1.710^308 bis +1.710^308
- Dezimalstellen in Mantisse: 15
Die Minimal- und Maximalwerte können über die Attribute MIN_VALUE und MAX_VALUE der Klassen Float und Double abgerufen werden.
Die Berechnung der dezimalen Werte von Fließkommazahlen ist komplexer als bei Ganzzahlen. Der Exponent wird um 127 verschoben, um negative Zahlen darstellen zu können. Die Mantisse muss mit einer führenden 1 beginnen, um normalisiert zu sein.
Ein 32-Bit float-Wert wird nach dem IEEE 754-Standard wie folgt berechnet:
(-1)^Vorzeichen 2^(Exponent-127) Mantisse
Hier ist ein Beispiel für das Bitmuster eines 32-Bit float-Werts:
Der Typ bool hat einen Wertebereich von wahr oder falsch (true, false).
Der Typ char behandelt Zeichen als ganze Zahlen und kann alle Operationen ausführen, die auch für Zahlen möglich sind. Der Unterschied zum Typ short besteht in der Eingabe, Ausgabe und dem Wertebereich. Beim Typ char werden lexikalische Zeichen ein- oder ausgegeben.
Ein wichtiger Sonderfall: Der Typ char verwendet wie der Typ short 16 Bit, aber die Wertebereiche unterscheiden sich. Der Typ char kodiert nur positive Werte und wird im Englischen als “unsigned” bezeichnet.
Der Typ char verwendet 16 Bit Unicode 4.0 Basic Multilingual Plane (BMP) zur Unterstützung von “supplementary characters” seit JDK 1.5.