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

Warum verhalten sich Zahlen mit Null-Präfix in C unerwartet?

Barbara Streisand
Freigeben: 2024-12-07 14:50:17
Original
509 Leute haben es durchsucht

Why Do Zero-Prefixed Numbers Behave Unexpectedly in C  ?

Zahlen mit vorangestellter Null und ihre Bedeutung verstehen

Im Bereich der Programmierung können Zahlen mit vorangestellter Null ein faszinierendes Verhalten zeigen. Lassen Sie uns anhand von Beispielen aus Visual Studio 2013 auf die Einzelheiten eingehen.

Bedenken Sie den folgenden Codeausschnitt:

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

Sonderbehandlung von Zahlen mit Null-Präfix

Der Compiler interpretiert Zahlen mit vorangestellter Null je nach unterschiedlich Kontext:

  • Dezimalzahlen (Basis 10): Wenn eine Zahl mit vorangestellter Null nur aus Ziffern von 0 bis 7 besteht, wird sie als Dezimalzahl interpretiert. Beispielsweise entspricht 07 7.
  • Oktalzahlen (Basis 8): Wenn eine Zahl mit vorangestellter Null eine Ziffer 8 oder 9 enthält, wird sie als Oktalzahl betrachtet. Beachten Sie jedoch, dass dies eine ungültige Verwendung gemäß dem C-Standard ist.
  • Hexadezimalzahlen (Basis 16):Null-vorangestellte Zahlen, die mit 0x oder 0X beginnen, werden als Hexadezimalzahlen interpretiert.

Ungewöhnliches Verhalten mit 00016 und 05016

Die Zuweisung int i = 00016; wird zu i == 14 aufgelöst, da der Compiler die führenden Nullen als zusätzliche Oktalziffern behandelt, auch wenn dies gemäß dem C-Standard nicht gültig ist.

Ähnlich gilt int i = 05016; ergibt i == 2574, weil der Compiler es wie folgt interpretiert:

  • 050 wird als Oktalzahl 50 behandelt.
  • 16 wird als Dezimalzahl 16 behandelt.
  • Das Ergebnis wird berechnet als (50 * 8) 16 = 2574.

Kompilierungsfehler mit 08

Ein ganzzahliges Literal, das mit 0 beginnt, gefolgt von einer anderen Ziffer als 0-7, z. B. 08, löst eine Kompilierung aus Fehler, da der Compiler erwartet, dass es sich um eine Oktalzahl handelt, 8 jedoch keine gültige Oktalzahl ist.

Das obige ist der detaillierte Inhalt vonWarum verhalten sich Zahlen mit Null-Präfix 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