Weitere Grundlegendende Programmierkonzepte in Java
Datentypen für Zahlen
Den Datentyp “int” zur Abbildung von ganzen Zahlen haben wir
bereits kennengelernt. Die Details dieses Datentyps haben wir aber noch
nicht genauer betrachtet. Als “int”, eigentlich Integer genannt, können
wir leider nicht jede beliebige ganze Zahl abbilden. Es können nur
Zahlen zwischen -2.147.483.648 und +2.147.483.647 verarbeitet werden.
Das liegt daran, dass für diesen Datentyp nur 32 Bit verwendet werden.
Ein Bit ist in der Informatik die kleinste Informationseinheit. Es ist
eine Variable die nur den Wert 1 oder 0 haben kann. Das Erste der 32
Bits dient der Abbildung des Vorzeichens. Mit den verbleibenden 31 Bit
können genau 2^31 = 2.147.483.648 Zustände also unterschiedliche Zahlen
dargestellt werden. Der positive Bereich ist um eins kleiner, da die 0
als kleinste positive Zahl auch einen Zustand abbekommen muss.
Sollte man den Bedarf haben noch größere Zahlen zu verarbeiten, so empfiehlt es sich den Datentyp long
zu verwenden. Hiermit können Ganzzahlen mit 64 Bit abgebildet werden.
Der Wertebereich reicht von -9.223.372.036.854.775.808 bis
+9.223.372.036.854.775.807. Wenn wir eine Zahl im Quelltext schreiben,
die vom Typ Long sein soll, so hängen wir hinten ein kleines l an long
zahl = 0l;.
Die Theorie hinter der Speicherung von
Dezimalzahlen ist leider wesentlich komplexer. Es ist mit dem endlichen
Speicher des Computers natürlich nicht einmal möglich die unendliche
vielen Reellen Zahlen zwischen 0 und 1 abzubilden. Um dennoch
Dezimalzahlen abbilden zu können, verwendet man eine sogenannte Gleit-
oder Fließkommadarstellung. Die Zahlen werden vom Computer als Produkt
einer Zahl mit einer Zehnerpotenz angenähert. Dadurch, dass die Zahlen
nur angenähert werden, kann es aber Ungenauigkeiten geben. Diese können
unter Umständen erheblich sein.
Auch für Fließkommazahlen gibt es einen Datentyp mit 32 Bit Speicher. Er heißt float und es gibt double
welcher 64 Bit für die Speicherung verwendet. Die Notation einer Double
Zahl sieht vor, dass ein Dezimalpunkt wie im Englischen üblich
verwendet wird double zero = 0.0;. Für Float muss zusätzlich ein kleines
f angehängt werden float one = 1.0f;. Float hat einen kleineren
Wertebereich und eine wesentlich geringere Genauigkeit. Dies lässt sich
leicht mit folgendem Code demonstrieren:
float f = 2345678.88f; System.out.println(f); // zeigt 2345679.0 double d = 2345678.88; System.out.println(d); // zeigt 2345678.88
Diese Datentypen für Zahlen haben alle gemeinsam, dass sie automatisch mit 0 initialisiert werden, wenn wir dies nicht explizit anders tun.
Für den Umgang mit int und long sollte man
wissen, dass diese überlaufen können. In diesem Fall kipp das
Vorzeichen. Addiert man also zu int 2147483647 eins dazu, so erhält man
-2147483648. Der Computer gibt keinen Fehler aus.