long spinnt
-
Beim Code-Segment:
long nb = 0000666034L; System.out.println(nb);
bekomme ich als Ausgabe: 224284
Wieso ist dem so und wie kann ich das verhindern? Ich brauche die Komplette Nummer, also auch mit 0en wenns geht.
-
Bei der Programmierung gibt man bei Dezimalzahlen keine führenden Nullen ein. Warum auch? Das würde Speicherplatz verschwenden, wenn man auch noch speichern müsste, wieviele führenden Nullen die Zahl enthält.
Stattdessen wird die Zahl bei der Ausgabe(!) mit führenden Nullen aufgefüllt, falls dies notwendig ist.
Da also führende Nullen nicht gebraucht werden, haben sie bei der Programmierung eine spezielle Bedeutung. Konkret kennzeichnen sie die Zahl als Oktalzahl. Die Zahl wird damit in das Oktalsystem umgerechnet.
Dein Code wäre also so korrekt:
long nb = 666034; // Ermittlung der Anzahl der Ziffern und entsprechende Ausgabe von führenden Nullen System.out.println(nb);
-
Wenn es octal system wär dürfte aber keine 8 in der Ausgabe vorkommen? oO
0 1 2 3 4 5 6 7 <- Werte vom Octalsystem?
-
Die Ausgabe ist Dezimal. Deine Konstante ist eine Oktalzahl.
-
0000666034L wird als Oktal interpretiert. Die Ausgabe erfolgt jedoch Dezimal als 224284. Es findet also eine Umrechnung statt.
Probiers selber aus:
http://www.chemie.unibas.ch/~team2006/SMueller/OcDeWa.htmlOktalzahl = 666034
Dezimalzahl = 224284
Entspricht dem Verhalten deines Programms.
-
stimmt, wenn wieder eine Umrechnung vollzogen wird.
Danke