IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Fonctionnement d'un Byte


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Points : 151
    Points
    151
    Par défaut Fonctionnement d'un Byte
    Soit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void main(String args[]) {
    		byte b = 1;
    		System.out.println(++b);
    		while(++b>0)
    			;
    		System.out.println(b);
    	}
    Le resultat est :
    Pourquoi le -128?

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Parce que le type byte est signé, de -128 à +127, et qu'il n'y a pas de contrôle d'overflow sur les opérations arithmétiques.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Deux choses :

    - les bytes, nombres stockés sur 1 octet, pouvant prendre 256 valeurs différentes, sont signés. Ça veut dire qu'ils peuvent être négatifs. Leur ensemble de valeurs est de -128 à 127
    Oui, c'est débile, je trouve aussi.

    - quand on fait des opérations sur des nombres et qu'on dépasse leur capacité, ils "tournent" en recommençant par la valeur qui se trouve à l'autre côté. Pour un byte, après 127, on passe à -128. Et si on enlève 1 à -128, on passe à 127.
    Pour un int, on passe de 2147483647 à -2147483648.
    C'est très souvent comme ça dans les langages de programmation. De toute façon il n'y a pas le choix, quand on utilise des types stockés sur un nombre fixe d'octets.

    Conclusion : ta boucle augmente la valeur de b, jusqu'à dépasser la capacité des bytes, ce qui le fait passer à la valeur négative la plus basse, -128.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Parce que un Byte représente un entier et tient sur un octet (256 valeurs possible). Mais c'est un entier signé. Le bit de poid le plus fort représente en réalité le signe de l'entier.

    Donc la valeur du byte va de -128 à 127

    -128 se code x80 en hexa
    -1 se code xFF
    0 se code x00
    et 127 se code x7F

    Lorsque tu rajoute 1 à 127, tu passe de x7F à x80, et donc de 127 à -128.
    Dans d'autre langage tu aurais une exception de dépassement de capacité. Ca n'existe pas en Java ?
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Conclusion : ta boucle augmente la valeur de b, jusqu'à dépasser la capacité des bytes, ce qui le fait passer à la valeur négative la plus basse, -128.
    Merci, c'est plus clair.
    C'est bête mais j'y ai pas pensé,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/08/2011, 09h19
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo