10
votes

Java Int Division me confondant

Je fais de la division Int très simple et je reçois des résultats étranges.

Ce code imprime 2 comme prévu: xxx

ceci Imprimés de code 1 comme non attendu: xxx

Qu'est-ce qui se passe ici?

< EM> (Windows XP Pro, Java 1.6 exécutant en Eclipse 3.4.1)


0 commentaires

3 Réponses :


22
votes

La valeur 0200 est une constante octal (base 8). Il est égal à 128 (décimal).

de Section 3.10.1 de la Spécification de la langue Java :

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.


5 commentaires

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 () fonction.



6
votes

La valeur 0200 est une octale, qui est 128 en décimale.

Pour plus d'informations, voir la section littérales du Primitive Types de données explication.


0 commentaires

1
votes

a observé un comportement intéressant ici.

Si je fais un integer.parseint ("0200") , je reçois 200 comme o / p.

howzzat ?!


2 commentaires

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.