Zum Hauptinhalt

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.