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 (also die Zahl) einen Wert ausserhalb von int
repräsentiert.
Probiere folgende Anweisung aus:
System.out.println( 9223372036854775807 );
Welche Fehlermeldung wird ausgegeben? 6) Wann? 7).
Wie kann man dies verhindern? Durch Hinzunahme von L
bzw. l
wird ein Ganzzahlliteral als long-Zahl betrachtet.
System.out.println( 9223372036854775807L );
Motivation
Hier wird statt der Ganzzahlen ein Datentyp für Gleitkommazahlen11) 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 |
Literalkonstanten für Gleitkommazahlen können bestehen aus:
Wichtig ist allerdings, dass zur Unterschiedung von ganzen Zahlen mindestens der Dezimalpunkt, der Exponent oder die Endung vorhanden sein muss. Dabei gilt:
Eine korrekte Ausgabe für unser Beispiel von oben erhalten wir demnach mit:
System.out.println(1.0/10.0);
Manchmal wollen wir nicht mit Zahlen sondern mit einzelnen Buchstaben oder Zeichen arbeiten. Hierfür bietet Java den Datentyp char
.
Daten vom Typ char
werden intern mit 16 Bits dargestellt.
Jedem Zeichen entspricht intern eine gewisse Zahl zwischen 0 und 216-1, der sogenannte Unicode.
Dem Buchstaben 'A' entspricht beispielsweise die Zahl 65, 'B' → 66, usw..
Wie sieht nun die Literalschreibweisen für char aus?
Auch hier gibt es verschiedene Möglichkeiten:
'A
', '?
''A
' als '\u0041
' 12) geschrieben werden.Literal Zeichen | |
---|---|
'\n ' | Zeilentrenner (new line, line feed) |
'\r ' | Wagenrücklauf (carriage return) |
'\t ' | Tabulator |
'\f ' | Seitenvorschub (form feed) |
'\b ' | Löschzeichen (backspace) |
'\\ ' | Backslash \ |
'\’ ' | einfaches Hochkomma ' |
'\" ' | doppeltes Hochkomma " |
'\0 ' | Nullzeichen |