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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    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 Expert 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
    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 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    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é,

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    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 ?

+ 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