Heim >Backend-Entwicklung >C++ >Warum verhalten sich Zahlen mit vorangestellter Null in C unerwartet?
Es wird häufig beobachtet, dass in bestimmten Programmiersprachen wie C Ziffern mit vorangestellter Null ein unerwartetes Verhalten zeigen. Schauen wir uns die spezifischen Szenarien an, die Sie vorgestellt haben, um diese Macken zu verstehen.
Betrachten Sie die folgenden Codeauszüge:
int i = 07; // i == 7 int i = 16; // i == 16 int i = 00016; // i == 14, why? int i = 05016; // i == 2574, wow ) int i = 08; // compile error, compiler expects octal number...
In C ganzzahlige Literale kann im Dezimal-, Oktal- oder Hexadezimalsystem angegeben werden. Ganzzahlen mit vorangestellten Nullen werden normalerweise als Oktalliterale interpretiert, außer wenn das Literal mit 0x oder 0X beginnt, was auf eine hexadezimale Basis hinweist.
In Ihrem Beispiel wird 00016 als Oktalliteral interpretiert, was zu i == führt 14. Oktalzahlen stellen Werte mit den Ziffern 0-7 dar. Die führenden Nullen haben keinen Einfluss auf den Wert des Literals.
In ähnlicher Weise wird 05016 auch als Oktalliteral interpretiert, das durch Multiplikation jeder Ziffer mit der entsprechenden Potenz von 8 in eine Dezimalzahl umgewandelt werden kann. Dies ergibt i == 2574.
Wenn das Literal jedoch mit 0x oder 0X beginnt, wird es als hexadezimales Literal interpretiert. Hexadezimale Zahlen stellen Werte dar, die die Ziffern 0–9 und die Buchstaben A–F (oder a–f) verwenden.
In Ihrem Beispiel würde 0x16 als hexadezimales Literal interpretiert, das den Wert 22 darstellt.
Gemäß dem C-Standard sind 8 und 9 nicht gültig Oktalziffern. Daher ist 08 ein ungültiges Oktalliteral und führt zu einem Syntaxfehler bei der Kompilierung.
Die Macken, die Sie bei Zahlen mit vorangestellter Null beobachtet haben, sind auf die spezifischen Regeln für die Interpretation von Ganzzahlliteralen in C zurückzuführen . Wenn Sie diese Regeln verstehen (nämlich die Interpretation von ganzen Zahlen mit vorangestellter Null als Oktalliterale, sofern nicht anders angegeben), können Sie Fehler vermeiden und ganzzahlige Werte korrekt verarbeiten.
Das obige ist der detaillierte Inhalt vonWarum verhalten sich Zahlen mit vorangestellter Null in C unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!