Heim >Backend-Entwicklung >C++ >Warum führen führende Nullen in C-Ganzzahlliteralen manchmal zu unerwarteten Ergebnissen?

Warum führen führende Nullen in C-Ganzzahlliteralen manchmal zu unerwarteten Ergebnissen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-26 12:48:091043Durchsuche

Why Do Leading Zeros in C   Integer Literals Sometimes Produce Unexpected Results?

Klärung numerischer Anomalien in C: Die Bedeutung führender Nullen

Im Bereich der C-Programmierung das Verhalten von ganzzahligen Literalen, die führende Nullen enthalten kann manchmal rätselhaft sein. Lassen Sie uns in diese merkwürdige Angelegenheit eintauchen und die zugrunde liegende Mechanik beleuchten.

Der C-Standard definiert Ganzzahlliterale als Ziffernfolgen ohne Dezimalpunkte oder Exponenten. Das Voranstellen des Literals mit 0 bedeutet eine Oktalzahl (Basis 8), während das Fehlen eines Präfixes auf eine Dezimalzahl (Basis 10) hinweist.

Beachten Sie jedoch die folgenden Codeausschnitte:

int i = 07; // i == 7
int i = 16; // i == 16
int i = 00016; // i == 14, why?
int i = 05016; // i == 2574, wow )

Im ersten Beispiel wird i auf den Wert 7 gesetzt, da 07 als Oktalwert interpretiert wird (8 * 0 7 = 7). Dies steht im Einklang mit der Konvention von C, führende Nullen ohne Präfix als Oktalzahlen zu interpretieren.

In den folgenden Beispielen erscheinen jedoch führende Nullen vor Dezimalstellen, was Fragen aufwirft. Laut Standard sollten diese Literale nicht als Oktalzahlen akzeptiert werden. Also, was passiert hier?

Die Antwort liegt in einer Compiler-Optimierung, die als „Oktalunterdrückung“ bekannt ist. Wenn der Compiler auf eine führende Null gefolgt von einer Dezimalziffer stößt, unterdrückt er die Oktalinterpretation und behandelt das Literal stattdessen als Dezimalziffer. Dies erklärt, warum 00016 als 14 und 05016 als 2574 ausgewertet wird.

Andererseits löst 08 einen Kompilierungsfehler aus, da es gegen die Standardregel verstößt, dass Oktalliterale die Ziffern 8 oder 9 nicht enthalten dürfen. Der Compiler erwartet a gültige Oktalzahl, aber es findet ein ungültiges Zeichen und löst einen Fehler aus.

Das obige ist der detaillierte Inhalt vonWarum führen führende Nullen in C-Ganzzahlliteralen manchmal zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn