Numerische Konstanten und die mystische Kraft des Präfixes Null
Haben Sie sich jemals gefragt, was passiert, wenn Sie einer numerischen Konstante in C/C das Präfix voranstellen? eine Null? Im Gegensatz zu den bekannten Dezimalkonstanten (z. B. 123) scheint diese scheinbar harmlose Modifikation ein verborgenes Geheimnis zu bergen.
Um dieses seltsame Verhalten zu veranschaulichen, betrachten Sie das Beispiel in der ursprünglichen Frage: Initialisieren eines Int mit dem Wert 0123 Interessanterweise ist das gedruckte Ergebnis nicht 123, wie man erwarten könnte, sondern eine unerwartete 83. Was passiert unter der Haube, die diese scheinbar dezimale Zahl in umwandelt? etwas anderes?
Die Antwort liegt in der rätselhaften Welt der numerischen Konstanten, in der das Präfix Null eine uralte Kraft in sich trägt. Standardmäßig wird davon ausgegangen, dass numerische Literale in C/C dezimal sind (Basis 10). Wenn Sie ihnen jedoch eine Null voranstellen, verwandeln sie sich auf magische Weise in Oktalkonstanten und signalisieren dem Compiler, sie mit der Basis 8 zu interpretieren.
Im Fall von 0123 wird jede Ziffer gemäß dem Oktalsystem interpretiert, was ergibt folgende Berechnung:
0 = 0
1 = 1
2 = 2
3 = 3
Wenn wir diese Werte in Dreiergruppen kombinieren, erhalten wir:
012 = 0 8^2 1 8 2 = 66
3 = 3
Die Addition dieser beiden Werte ergibt das Endergebnis: 66 3 = 83.
Dies erklärt das unerwartete Verhalten, das bei vorangestellten Nullen beobachtet wird. Es ist ein Beweis für die komplizierten Feinheiten von C/C, wo verborgene Mechanismen überraschende und oft verwirrende Ergebnisse liefern können. Wenn Sie also das nächste Mal auf eine numerische Konstante mit dem Präfix Null stoßen, denken Sie an die oktale Tür, die sie öffnet, sodass Ihre Kompilierungen den weniger zurückgelegten Weg zurücklegen können.
Das obige ist der detaillierte Inhalt vonWarum verwandelt ein Präfix Null 0123 in 83 in C/C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!