Heim >Backend-Entwicklung >C++ >Warum ändern führende Nullen ganzzahlige Werte in C?

Warum ändern führende Nullen ganzzahlige Werte in C?

Susan Sarandon
Susan SarandonOriginal
2024-11-27 19:40:11266Durchsuche

Why Do Leading Zeros Change Integer Values in C  ?

Enthüllung des Rätsels führender Nullen in Ganzzahlen

Das Verhalten, das Sie in Visual Studio 2013 beobachtet haben, spiegelt die Regeln für die Darstellung von Ganzzahlen wider verschiedene Basen, insbesondere dezimal, oktal und hexadezimal.

Eine ganze Zahl Literal in C kann mit Null beginnen, um verschiedene Basen darzustellen:

  • Dezimal (Basis 10): Ein Dezimalliteral beginnt mit einer Ziffer ungleich Null und besteht aus Ziffern von 0 bis 9.
  • Oktal (Basis 8): Ein Oktalliteral beginnt mit Null, gefolgt von Ziffern von 0 bis 7.
  • Hexadezimal (Basis 16): Ein hexadezimales Literal beginnt mit 0x oder 0X und besteht aus Ziffern von 0 bis 9 und den Buchstaben a bis f (oder A bis). F).

In Ihrem Beispiel:

  • 07 ist ein Oktalliteral, das den Wert 7 darstellt (7 in Basis 10).
  • 16 ist ein Dezimalliteral, das den Wert 16 darstellt.
  • 00016 ist ein oktales Literal, das den Wert 14 (16 in der Basis) darstellt 8).

Der Compilerfehler beim Versuch, 08 zuzuweisen, liegt daran, dass 8 keine gültige Oktalziffer ist. Sie ist nur bis 7 gültig.

Der Grund für die Konvertierung von 00016 in 14 ist, dass die führenden Nullen in einem Oktalliteral darauf hinweisen, dass die Zahl zur Basis 8 steht. Der Compiler führt die Konvertierung durch, indem er jede Ziffer multipliziert durch die entsprechende Potenz von 8, beginnend von rechts nach links.

Für 00016 bedeutet dies:
0 * 8^4 0 * 8^3 0 * 8^2 1 * 8^1 6 * 8^0 = 14

Daher ist das von Ihnen beobachtete Verhalten ein Ergebnis der Interpretation der numerischen Werte durch den Compiler zu ihren führenden Ziffern und den Regeln für verschiedene Basen in C .

Das obige ist der detaillierte Inhalt vonWarum ändern führende Nullen ganzzahlige Werte in C?. 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