Zéro est toujours nulle, donc il n’est pas grave. Mais dans une récente discussion avec mon ami, il a dit que les littéraux octaux sont presque pas utilisés aujourd'hui. Puis il est apparu sur moi que littéraux entiers en fait presque tous dans mon code sont octal, nommément . Est
un littéral octal selon la grammaire de C++ ? Que signifie le mot standard ?
Réponses
Trop de publicités?N'importe quelle valeur entière avec le préfixe 0
est une valeur octale. I. e.: 01 est octal 1, 010 est octal 10, qui est décimal 8, et 0 est octal 0 (qui est décimal, et tous les autres, 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 avec le préfixe 0x
est pas avec le préfixe 0
. 0x
est explicitement préfixe 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
Terrific question :) J’ai regardé dans la Spécification du langage Java, et en Java, il est décimal. La spécification contient même la citation suivante :
Notez que les chiffres octaux toujours composent de deux ou plusieurs chiffres ; 0 est toujours considéré comme un chiffre décimal - non pas qu’il importe beaucoup dans la pratique, pour les chiffres 0, 00 et 0 x 0 tous représentent exactement la même valeur de nombre entier.
Apparemment, tous les littéraux entiers à partir de zéro sont en fait octal. Cela signifie qu'il comprend 0. Cela fait peu de différence à partir du zéro, c'est zéro. Mais ne sachant pas ce fait peut vous faire du mal.
Je l'ai compris quand j'ai essayé d'écrire un programme pour convertir les nombres binaires en décimal et en hexadécimal de la sortie. À chaque fois que je donnais un numéro commençant à zéro, j'avais la mauvaise sortie (Par exemple, 012 = 10, pas 12).
Il est bon de connaître ces informations afin de ne pas faire la même erreur.