Est 0 décimal littéral ou octal littérale?

Zéro est toujours zéro, donc ça n'a pas d'importance. Mais dans une discussion récente avec mon ami il a dit que les littérales octal sont presque inutilisées aujourd'hui. Puis il s'est avéré sur moi qu'en fait presque tout littérales integer dans mon code sont octal, à savoir 0 .

Est 0 octal littérale selon le C++ de la grammaire? Quelle est la norme de dire?

315
demandé sur Rakete1111 2011-08-01 11:46:26

3 réponses

Oui, 0 est un Octal littérale en C++.

selon la norme C++:

2.14.2 les littéraux Entiers [lex.icône]

integer-literal:  
    decimal-literal integer-suffixopt  
    octal-literal integer-suffixopt  
    hexadecimal-literal integer-suffixopt  
decimal-literal:  
    nonzero-digit  
    decimal-literal digit  
octal-literal:  
    0                           <--------------------<Here>
    octal-literal octal-digit
285
répondu Alok Save 2011-08-01 07:48:30

toute valeur entière préfixée par 0 est une valeur octale. C'est-à-dire: 01 est octal 1, 010 est octal 10, qui est décimal 8, et 0 est octal 0 (qui est Décimal, et tout autre, 0).

donc oui, " 0 " est un octal.

C'est la traduction littérale de la grammaire extrait de code dans @Sla réponse :-)


un entier préfixé par 0x est et non préfixé par 0 . 0x est un préfixe explicitement différent. Apparemment il y a des gens qui ne peuvent pas faire cette distinction.

selon cette même norme, si nous continuons:

 integer-literal:
     decimal-literal integer-suffixopt
     octal-literal integer-suffixopt
     hexadecimal-literal integer-suffixopt
 decimal-literal:
     nonzero-digit                       <<<---- That's the case of no prefix.
     decimal-literal digit-separatoropt digit
 octal-literal:
     0                                    <<<---- '0' prefix defined here.
     octal-literal digit-separatoropt octal-digit <<<---- No 'x' or 'X' is
                                                          allowed here.
 hexadecimal-literal:
     0x hexadecimal-digit                 <<<---- '0x' prefix defined here
     0X hexadecimal-digit                 <<<---- And here.
     hexadecimal-literal digit-separatoropt hexadecimal-digit
43
répondu littleadv 2014-10-30 20:03:44

apparemment tous les entiers littéraux commençant par zéro sont en fait octal. Cela signifie qu'il comprend 0. Cela fait peu de différence puisque Zéro est zéro. Mais ne pas savoir ce fait peut vous blesser.

j'ai réalisé cela quand j'ai essayé d'écrire un programme pour convertir des nombres binaires à la sortie décimale et hexidecimal. Chaque fois que je donnais un nombre commençant par zéro, j'obtenais la mauvaise sortie (par exemple, 012 = 10, Pas 12).

il est bon de connaître cette information pour ne pas faire la même erreur.

-1
répondu MCG 2011-08-01 15:57:35