Je fais de la division Int très simple et je reçois des résultats étranges.
Ce code imprime ceci Imprimés de code Qu'est-ce qui se passe ici? p> < EM> (Windows XP Pro, Java 1.6 exécutant en Eclipse 3.4.1) em> p> p> 2 code> comme prévu: p>
1 code> comme non fort> attendu: p>
3 Réponses :
La valeur de Section 3.10.1 de la Spécification de la langue Java : p>
Un chiffre octal constitue un chiffre ASCII 0 suivi d'un ou de plusieurs des chiffres ASCII 0 à 7 et peut représenter un entier positif, zéro ou négatif. P>
blockQuote> 0200 code> est une constante em> octal em> (base 8). Il est égal à 128 (décimal). P>
Wow, je ne peux pas croire que je n'ai pas rencontré cela auparavant. Je me sens idiot. Merci!
J'ai regardé votre score de représentant et je devais être autre chose!
C'est l'une des caractéristiques les plus irritantes des langues basées sur C. Je n'ai jamais vu que quelqu'un utilise une constante octale exprès, mais je l'ai vu causer des problèmes plusieurs fois.
C'est un cas de rasoir d'Occam. C'est généralement la solution la plus simple.
La seule fois que j'utilise jamais des constantes octales exprès est dans le C mkdir () code> fonction.
La valeur 0200 est une octale, qui est Pour plus d'informations, voir la section littérales du Primitive Types de données explication. P>
a observé un comportement intéressant ici. p>
Si je fais un howzzat ?! p> integer.parseint ("0200") code>, je reçois
200 code> comme o / p. p>
Bien vérifier l'API DOC pour Paysint. Il dit tout: public statique int parseint (chaîne s) ... analyse l'argument de la chaîne comme un entier décimal signé. Les caractères de la chaîne doivent tous être des chiffres décimaux, sauf que le premier caractère peut être un signe ASCII moins "- '(' \ u002d ') pour indiquer une valeur négative.
Paysint analyse une chaîne avec Radix 10. Un appel à Integer.Decode analyse de 0200 à 128.