345 votes

Est 0 un nombre décimal littéral ou un littéral octal ?

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 ?

308voto

Alok Save Points 115848

Oui, `` est un littéral Octal en C++.

Conformément à la norme C++ :

2.14.2 littéraux integer [lex.icon]

46voto

littleadv Points 15607

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

8voto

Tobias Ritzau Points 2613

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.

-1voto

MCG Points 60

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X