50 votes

Pourquoi 08 n'est-il pas un littéral entier valide en Java ?

Pourquoi la 08 est considéré comme un int hors plage, mais 07 et en dessous ne le sont pas ?

74voto

Stuart Cook Points 1851

En Java et dans plusieurs autres langages, un entier littéral commençant par 0 est interprétée comme une quantité octale (base 8).

Pour les nombres à un chiffre (autres que 08 y 09 qui ne sont pas autorisées), le résultat est le même, et vous ne remarquerez peut-être pas qu'elles sont interprétées en octal. Cependant, si vous écrivez des nombres avec plus d'un chiffre significatif, vous risquez d'être dérouté par le résultat.

Par exemple :

010 ==  8
024 == 20

Comme les valeurs littérales octales ne sont généralement pas ce que vous voulez, vous devez toujours veiller à ne pas commencer une valeur littérale d'un entier par 0 à moins bien sûr que vous n'essayiez d'écrire zéro seul.

16voto

cwallenpoole Points 34940

Tout nombre précédé d'un 0 est considéré comme octal. Les nombres octaux ne peuvent utiliser que les chiffres 0 à 7, tout comme les nombres décimaux peuvent utiliser les chiffres 0 à 9, et les nombres binaires peuvent utiliser les chiffres 0 à 1.

// octal to decimal
01  // 1
02  // 2
07  // 7
010 // 8
020 // 16

// octal to binary (excluding most significant bit)
01  // 1 
02  // 10
07  // 111
010 // 1000 
020 // 10000

Il y a 10 types de personnes, celles qui comprennent le ternaire, celles qui ne le comprennent pas et celles qui pensent qu'il s'agit d'une blague stupide.

5voto

Mahmoud Hossam Points 1490

A partir de la Spécification Java :

Un chiffre octal se compose d'un chiffre ASCII 0 suivi d'un ou plusieurs des chiffres ASCII 0 à 7 et peut représenter un nombre entier positif, nul ou négatif.

3voto

Le zéro initial signifie que la valeur est en octal. 8 n'est pas un chiffre octal, pas plus que 2 n'est valide en binaire ou que G n'est valide en hexadécimal.

3voto

Avijit Karmakar Points 3827

En Java Si vous définissez un int avec un '0' en tête, cela signifie que vous définissez un nombre en Octal .

int a = 08 donne un message d'erreur car il n'y a pas de chiffre '8' dans le champ Octal . Octal ne fournit que les numéros 0 à 7.

Si vous définissez a = 07 il n'y a pas d'erreur de dépassement de plage car les nombres '0' et '7' sont dans la plage de l'octal.

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