Heim > Backend-Entwicklung > C++ > Warum verhalten sich Zahlen mit vorangestellter Null in C unerwartet?

Warum verhalten sich Zahlen mit vorangestellter Null in C unerwartet?

Linda Hamilton
Freigeben: 2024-12-02 22:43:12
Original
388 Leute haben es durchsucht

Why Do Zero-Prepended Numbers Behave Unexpectedly in C  ?

Das eigenartige Verhalten von Zahlen mit vorangestellter Null verstehen

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...
Nach dem Login kopieren

Nullziffern und Oktalinterpretation

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.

Führende Nullen und Hexadezimalzahl Interpretation

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.

Oktale Ziffern und Syntaxfehler

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.

Schlussfolgerung

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage