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

avec Java Discussion :

[Java 5] soucis avec la converstion explicite de primitive


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut [Java 5] soucis avec la converstion explicite de primitive
    Bonjour j'ai un soucis avec les conversion explicite de short vers byte, j'ai essayé de convertir en base 2, rien n'y fait, je ne comprends toujours pas.

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MonCasting{
    public static void main(String[] args) {
    long l = 10;
    int i = (int) l;
    short s = 175;
    byte b = (byte) s;
    System.out.println("Value of i: " + i );
    System.out.println("Value of b: " + b);
    }
    }
    La sortie fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Value of i: 10
    Value of b: -81
    Mon gros problème c'est de comprendre byte b = (byte) s; en fait quand je converti s dont la valeur est 175, en base 2 j'ai : 0000000010101111, jusqu'à là aucun problème, puis les bit s'étendent de -127 à 128, et font 8 bits.
    En convertissant -81 en base 2 j'obtiens : 1010111 et c''est là où je ne comprends plus du tout.
    Que s'est il passé pour pour partir
    0000000010101111 ==> et obtenir
    1010111
    Je vous remercie pour toute aide.

    Bien à vous.

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    Le type byte comprends les valeurs de -128 à 127. Un short égal à 175 ne peut donc être transtyper en byte sans "dégats".
    Un "bouclage" est fait sur les valeurs maximale/minimale du type (Java élimine les bits excédentaires "à gauche").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class Test {
     
    	public static void main(String[] args) {
    		System.out.println("Integer.MAX_VALUE = " + Integer.MAX_VALUE);
    		System.out.println("Integer.MIN_VALUE = " + Integer.MIN_VALUE);
    		System.out.println("Byte.MAX_VALUE = " + Byte.MAX_VALUE);
    		System.out.println("Byte.MIN_VALUE = " + Byte.MIN_VALUE);
     
    		System.out.println("------------------------------------");
     
    		long l = Integer.MAX_VALUE + 1L;
    		System.out.println("(type long) l = " + l);
     
    		int i = (int) l;
    		System.out.println("(type int) i = " + i);
     
    		System.out.println("------------------------------------");
     
    		l = Integer.MAX_VALUE + 2L;
    		System.out.println("(type long) l = " + l);
     
    		i = (int) l;
    		System.out.println("(type int) i = " + i);
     
    		System.out.println("------------------------------------");
     
    		short s = 128;
    		System.out.println("(type short) s = " + s);
     
    		byte b = (byte) s;
    		System.out.println("(type byte) b = " + b);
     
    		System.out.println("------------------------------------");
     
    		s = 175;
    		System.out.println("(type short) s = " + s);
     
    		b = (byte) s;
    		System.out.println("(type byte) b = " + b);
     
    	}
     
    }

  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
    Citation Envoyé par smutmutant2003 Voir le message
    Mon gros problème c'est de comprendre byte b = (byte) s; en fait quand je converti s dont la valeur est 175, en base 2 j'ai : 0000000010101111, jusqu'à là aucun problème, puis les bit s'étendent de -127 à 128, et font 8 bits.
    En convertissant -81 en base 2 j'obtiens : 1010111 et c''est là où je ne comprends plus du tout.
    Que s'est il passé pour pour partir
    0000000010101111 ==> et obtenir
    1010111
    Il y a un bug dans ton affichage en binaire.

    De 0000000010101111 on doit passer à 10101111 et c'est exactement ce qui se passe en convertissant 175 de short vers byte.

    En binaire, pour un byte, -81 est bel et bien 10101111.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Il y a un bug dans ton affichage en binaire.

    De 0000000010101111 on doit passer à 10101111 et c'est exactement ce qui se passe en convertissant 175 de short vers byte.

    En binaire, pour un byte, -81 est bel et bien 10101111.
    Merci Thelvin, tout s'explique maintenant.
    De 0000000010101111 on prend les 8 bits de la droite 0000000010101111 et ça nous donne 10101111 ce qui est parfaitement logique à présent. Je me suis trompé en convertissant un nombre <0 en base 2, et je n'avais même pas remarqué, je n'avais aucun moyen de le vérifier, si quelqu'un aurait un site web, où une application éxistente. C'est pas la première fois que ça m'arrive ce genre chose

    Bien à vous.

Discussions similaires

  1. soucis avec la commande java
    Par polymorphisme dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 29/07/2010, 15h11
  2. soucis avec axis2 et Hashmap java
    Par Nandou56 dans le forum Services Web
    Réponses: 0
    Dernier message: 20/05/2010, 15h59
  3. Souci avec l'installation de Java
    Par sandra_leb dans le forum Général Java
    Réponses: 3
    Dernier message: 10/05/2010, 14h18
  4. Soucis avec Java sous Mac OS X
    Par moila dans le forum Langage
    Réponses: 1
    Dernier message: 16/10/2009, 13h33
  5. Souci avec Java Web Start
    Par polymorphisme dans le forum JWS
    Réponses: 0
    Dernier message: 14/10/2009, 16h51

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