Dies ist eine alte Version des Dokuments!
Jetzt einiges zu den Variablen:
Wenn wir wollen, dass der Computer sich etwas "merkt", brauchen wir etwas, worin dieses etwas abgespeichert wird, damit es verarbeit werden kann: Eine Variable. Es gibt dabei verschiedene Typen von Variablen und zudem mit unterschiedlichen Datenbereichen.
Datentypen werden in zwei Gruppen gegliedert:
Alles, was im Computer irgendwie gespeichert und verarbeitet wird, wird in Binärcode übersetzt (sogar auch die Programme, wie wir bereits gelernt haben). Bei positiven ganzen Zahlen2) mag das etwas einfach sein, denn zu jeder Zahl gibt es ja die Binärdarstellung…
Ganze Zahlen werden im Zweierkomplement repräsentiert.3)
Beispiel:
`23 = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 10111 `
Die verschiedenen Datentypen zur Repräsentation ganzer Zahlen unterscheiden sich in der Anzahl der verwendeten Bits.
-1 als byte:
`-1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1^2*0 = 11111111 `
Dabei wird das erste der 8 Bits4) negativ gedeutet. Naja, soviel Theorie reicht erst einmal, hier ein kleiner Überblick:
Typname | kleinster Wert | größter Wert | Länge |
---|---|---|---|
byte | 127 | -128 | 8 Bits |
short | 32767 | -32768 | 16 Bits |
int | 2147483647 | -2147483648 | 32 Bits |
long | 9223372036854775807 | -9223372036854775808 | 64 Bits |
Die Frage ist nun: Wie werden Zahlen (wie die 3 und die 4 im ersten Bespiel) 5) repräsentiert, z.B. 4711?
Antwort: Wenn nicht anders angegeben, dann immer als int
!
Dies kann zu Problemen führen, wenn die Literalkonstante (Zahl) einen Wert ausserhalb von int
repräsentiert.
Probiere folgende Anweisung aus:
System.out.println( 9223372036854775807 ); <code> Welche Fehlermeldung wird ausgegeben? ((Numeric overflow)) Wann? ((beim Kompilieren (Übersetzen) )).\\ Wie kann man dies verhindern? Durch Hinzunahme von ''L'' bzw. ''l'' wird ein Ganzzahlliteral als long-Zahl betrachtet. <code java> System.out.println( 9223372036854775807L ); <code> ===== Gleitkommazahlen ===== **Motivation** \\ - Was gibt folgende Anweisung aus? <code java> System.out.println(1/10);
Hier wird statt der Ganzzahlen ein Datentyp für Gleitkommazahlen9) benötigt. Java bietet hierzu die Datentypen float
und double
:
Auch hier ein Überblick über die interne Repräsentation 32 bzw. 64 Bit im IEEE 754 Standard:
Typname | größter positiver Wert | kleinster positiver Wert | Länge |
---|---|---|---|
float | ≈3.40282E+38 | ≈1.40129E-45 | 32 Bits |
double | ≈1.79769E+308 | ≈4.94065E-324 | 64 Bits |