Ok ... Also hatte ich eine dumme Idee und versuchte, den Wert 0123 in einen Int zu setzen, nur neugierig, was passieren würde. Ich nahm an, dass ich 123 bekommen würde, wenn ich den Wert ausgedruckt habe, aber stattdessen 83 ... Irgendwelche Ideen warum? was passiert im Compiler / Speicher, der diesen Wert zu 83 macht?
Ich habe das in C ++ und C mit GCC-Compiler versucht und auch mit einem Float versucht, was zu den gleichen Ergebnissen führte.
In C / C ++ ist ein numerisches Literal mit dem Präfix "0" oktal (Basis 8).
Siehe Ссылка
Die führende 0 zeigt eine "oktale" Zahl an. Also wird es 1 * 8 ^ 2 + 2 * 8 ^ 1 + 3 * 8 ^ 0 = 83
Nach dem C ++ - Standard in [lex.icon] können Integer-Literale in 3 Typen unterteilt werden: Dezimal-Literale, Oktal-Literale und Hexadezimal-Literale, von denen jedes ein Suffix für Signess und Länge haben kann Geben Sie
ein Dezimal-Literale müssen mit einer Ziffer ungleich Null beginnen, während oktale Literale mit 0 beginnen und hexadezimale Literale 0x und 0X haben, nach dem Präfix (für Oktal-Literale und Hexadezimal-Literale) eine Ziffer nicht darstellbar in der entsprechenden Basis sollte einen Kompilierungsfehler auslösen (wie 09, die error C2041: illegal digit '9' for base '8'
verursacht und in anderen Compiler prog.cpp:6:15: error: invalid digit "9" in octal constant
), da, wenn das Integer-Literal nicht darstellbar ist, das Programm schlecht gebildet wird.
Tags und Links c c++ syntax compiler-construction numbers