Was bedeutet es, wenn einer numerischen Konstante in C/C++ eine 0 vorangestellt wird?

Lesezeit: 2 Minuten

Was bedeutet es wenn einer numerischen Konstante in CC eine
CurtisJC

Ok … Also hatte ich eine dumme Idee und versuchte, den Wert 0123 in ein int zu setzen, nur neugierig zu sehen, was passieren würde. Ich nahm an, dass ich beim Drucken des Werts 123 erhalten würde, aber stattdessen bekam ich 83 … Irgendwelche Ideen warum? Was passiert im Compiler/Speicher, wodurch dieser Wert 83 wird?

Ich habe dies in C++ und C mit dem GCC-Compiler versucht und auch mit einem Float versucht, der zu den gleichen Ergebnissen führte.

In C/C++ ist ein numerisches Literal mit dem Präfix „0“ oktal (Basis 8).

Sehen http://www.cplusplus.com/doc/tutorial/constants/

Was bedeutet es wenn einer numerischen Konstante in CC eine
Peter K.

Glückwünsche! Sie haben Oktal entdeckt.

  • Amüsement ist besser als Verwirrung. 🙂

    – PeterK.

    15. Juni 2011 um 23:28 Uhr

  • To write numbers in octal, precede the value with a 0. ... To write numbers in octal, precede the value with a 0x or 0X. doh!

    – mrk

    15. Juni 2011 um 23:28 Uhr


  • D’oh! ist richtig! Habe es gegen ein besseres ausgetauscht … Danke!

    – PeterK.

    15. Juni 2011 um 23:31 Uhr

Dies liegt daran, dass jede Zahl, die mit 0 beginnt, als oktal (Basis 8) und nicht als dezimal angesehen wird.

Dasselbe gilt, wenn Sie mit 0x beginnen, erhalten Sie hexadezimal

Was bedeutet es wenn einer numerischen Konstante in CC eine
Bill Förster

Die führende 0 zeigt eine “oktale” Zahl an. Also wird es 1*8^2 + 2*8^1 + 3*8^0 = 83

0123 ist eine Oktalkonstante (Basis 8). 83 ist das Dezimaläquivalent.

1646309406 916 Was bedeutet es wenn einer numerischen Konstante in CC eine
Bertrand Maron

0123 ist in oktal.

1646309406 493 Was bedeutet es wenn einer numerischen Konstante in CC eine
lccarrasco

Gemäß dem C++-Standard in [lex.icon] Integer-Literale können in 3 Typen unterteilt werden: Dezimal-Literale, Oktal-Literale und Hexadezimal-Literale, die jeweils ein Suffix für Vorzeichen und Längentyp haben können

Dezimalliterale Muss mit einer Ziffer ungleich Null beginnen, während Oktalliterale mit 0 beginnen und Hexadezimalliterale 0x und 0X haben, sollte nach dem Präfix (für Oktalliterale und Hexadezimalliterale) jede Ziffer, die nicht in der entsprechenden Basis darstellbar ist, einen Kompilierungsfehler auslösen (z wie 09 das bewirkt error C2041: illegal digit '9' for base '8' und in anderen Compiler prog.cpp:6:15: error: invalid digit "9" in octal constant), denn wenn das Integer-Literal nicht darstellbar ist, wird das Programm falsch formatiert.

923230cookie-checkWas bedeutet es, wenn einer numerischen Konstante in C/C++ eine 0 vorangestellt wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy