Pourquoi la 08
est considéré comme un int hors plage, mais 07
et en dessous ne le sont pas ?
Réponses
Trop de publicités?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.
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.
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.
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.
- Réponses précédentes
- Plus de réponses