Oktal in Dezimal
Oktalzahlen zur Basis 8 unkompliziert in Dezimalzahlen konvertieren.
Wer in einer älteren JavaScript-Konsole den Befehl parseInt("010") ohne zweite Angabe ausführte, erhielt oft 8 statt 10 als Ergebnis. Eine führende Null signalisierte damals automatisch das Oktalsystem, was in vielen Anwendungen zu unerwarteten Rechenfehlern führte.
Das Oktalsystem im Vergleich zum Dezimalsystem
Während das gewohnte Dezimalsystem auf Zehnerpotenzen aufbaut, nutzt das Oktalsystem die Basis 8. Zulässig sind ausschließlich die Ziffern 0 bis 7, weshalb die Ziffern 8 und 9 in einer gültigen Oktalzahl niemals vorkommen. Bei der Zahl 57 steht die Ziffer 5 an der Achterstelle und die 7 an der Einerstelle.
Die Berechnung lautet (5 × 8) + 7 = 47. Derselbe Wert lässt sich im Hexadezimalsystem als 2F oder im Binärsystem als 101111 darstellen. Alle drei Schreibweisen bezeichnen exakt dieselbe Menge.
Historische Tücken mit führenden Nullen
In der Programmiersprache C gilt ein Zahlenliteral mit vorangestellter Null seit jeher als oktal, wodurch 010 im Quelltext dem Wert 8 entspricht. JavaScript übernahm diese Konvention zunächst informell, was besonders bei formatierten Datumsangaben oder Postleitzahlen mit führenden Nullen für Probleme sorgte.
Seit ECMAScript 5 verwendet parseInt standardmäßig die Basis 10, sofern keine andere Basis angegeben ist. In älteren Projekten oder Sprachen ohne diese Anpassung tritt das Phänomen jedoch weiterhin auf.
Typische Einsatzbereiche für Oktalzahlen
- Dateirechte unter Unix — Befehle wie chmod oder umask verarbeiten Berechtigungen traditionell als Oktalwerte, oft gekennzeichnet durch eine führende Null.
- Code in C und C++ — Ganzzahl-Literale mit vorangestellter Null werden weiterhin standardmäßig als Oktalzahlen interpretiert.
- Präfixe in modernen Sprachen — Aktuelle Versionen von Python oder JavaScript verlangen das eindeutige Präfix
0o, um Verwechslungen auszuschließen.
Manuelle Umrechnung von Oktal in Dezimal
- Notiere alle Ziffern der Oktalzahl und nummeriere ihre Positionen von rechts nach links beginnend bei 0.
- Multipliziere jede Ziffer mit 8 hoch der jeweiligen Position.
- Addiere die Zwischenergebnisse aller Stellen zusammen.
- Vergewissere dich vorab, dass keine 8 oder 9 in deiner Eingabe enthalten ist, da der Wert sonst ungültig ist.
Häufige Fragen zur Oktal-in-Dezimal-Umwandlung
Warum endet der Ziffernbereich bei der Zahl 7?
Weil die Basis 8 genau acht verschiedene Zustände pro Stelle erlaubt, nämlich 0 bis 7. Eine 8 oder 9 existiert im Oktalsystem nicht.
Wo begegnen einem Oktalwerte heute noch?
Hauptsächlich im Dateisystem von Unix und Linux bei Zugriffsberechtigungen sowie vereinzelt in älteren Quelltexten oder Dateiformaten.
Was genau verursachte das Problem bei parseInt?
Ohne Radix-Parameter werteten frühe Browser Strings mit vorangestellter Null als Oktalzahl, sodass aus 010 ungewollt der Dezimalwert 8 wurde.
Unterscheidet sich die chmod-Bedeutung von einer Dezimalzahl?
Die mathematische Basis ist identisch. Allerdings stehen die einzelnen Ziffern bei chmod für Bitmasken von Rechten und werden selten als Dezimalzahl gelesen.
Unterstützt modernes JavaScript noch Oktalzahlen?
Ja, allerdings muss das Präfix 0o wie bei 0o57 verwendet werden. Die alte Schreibweise mit einfacher Null ist im Strict-Mode unzulässig.