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?
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
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
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.