Was bedeutet es, wenn einer numerischen Konstante in C/C++ eine 0 vorangestellt wird?
Lesezeit: 2 Minuten
CurtisJC
Ok … Also hatte ich eine dumme Idee und versuchte, den Wert 0123 in ein int zu setzen, nur neugierig zu sehen, was passieren würde. Ich nahm an, dass ich beim Drucken des Werts 123 erhalten würde, aber stattdessen bekam ich 83 … Irgendwelche Ideen warum? Was passiert im Compiler/Speicher, wodurch dieser Wert 83 wird?
Ich habe dies in C++ und C mit dem GCC-Compiler versucht und auch mit einem Float versucht, der zu den gleichen Ergebnissen führte.
In C/C++ ist ein numerisches Literal mit dem Präfix „0“ oktal (Basis 8).
Gemäß dem C++-Standard in [lex.icon] Integer-Literale können in 3 Typen unterteilt werden: Dezimal-Literale, Oktal-Literale und Hexadezimal-Literale, die jeweils ein Suffix für Vorzeichen und Längentyp haben können
Dezimalliterale Muss mit einer Ziffer ungleich Null beginnen, während Oktalliterale mit 0 beginnen und Hexadezimalliterale 0x und 0X haben, sollte nach dem Präfix (für Oktalliterale und Hexadezimalliterale) jede Ziffer, die nicht in der entsprechenden Basis darstellbar ist, einen Kompilierungsfehler auslösen (z wie 09 das bewirkt error C2041: illegal digit '9' for base '8' und in anderen Compiler prog.cpp:6:15: error: invalid digit "9" in octal constant), denn wenn das Integer-Literal nicht darstellbar ist, wird das Programm falsch formatiert.
9232300cookie-checkWas bedeutet es, wenn einer numerischen Konstante in C/C++ eine 0 vorangestellt wird?yes