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 :

[Débutant] fonctionnement de l'opérateur >>>


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
    Juin 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 56
    Par défaut [Débutant] fonctionnement de l'opérateur >>>
    Bonjour,
    J'ai encore une question théorique

    J'ai cru bien comprendre le fonctionnement des opérateurs >> et >>>. Par exemple il me paraît clair que 12 >> 2 correspond à 0...01101 >> 2, soit 0...00011, soit 3.

    Mais il y a quelque chose qui m'échappe tout de même. Pourquoi, quand je décale d'un très grand nombre de bits, ne trouvé-je pas toujours 0 ?

    Par exemple si je fais 500 >>> 100 je m'attends à avoir 0, hors cela renvoie 31. 500, comme tout entier, n'est codé que sur 32 bits, donc si je décale de 100 bits, je devrais avoir zéro, non ?

    ++ Kloss

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    >> correspond au shift to right (shr en asm) binaire. Donc 011011 >> 2 reverra 000110

    >>> correspond au rotation on right (ror en asm) binaire. Donc 011011 >>> 2 renverra 110110

    En fait le second deplace les bits a droite vers la gauche, tandis que le premier les gicle et fou des zero a gauche


  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 56
    Par défaut
    En fait le second deplace les bits a droite vers la gauche, tandis que le premier les gicle et fou des zero a gauche
    Oups là je ne suis pas tout à fait d'accord.
    Selon moi, voilà le fonctionnement des opérateurs >> et >>>

    >> décale les chiffres vers la droite, comble à gauche avec des 0 pour les nombres positifs, et avec des 1 pour les nombres négatifs.
    >>> décale les chiffres vers la droite, comble à gauche avec des 0 pour tous les nombres, qu'ils soient positifs ou négatifs.


    Prenons l'entier 2006, écrit sur 32 bits (le premier donne le signe du nombre, 0 pour les nombres positifs, 1 pour les nombres négatifs).
    2006 = 0*2^30 + ... + 0 * 2^11 + 1 * 2^10 + 1 * 2^9 + 1 * 2^8 + 1 * 2^7 + 1 * 2^6 + 0 * 2^5 + 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 * 2^0, donc en binaire : 0000000000000000000011111010110

    2006 >> 3 signifie qu'on décale tous les bits de 3 crans la droite ; les trois derniers bits disparaissent ; on comble les trois premiers avec des zéros. On obtient : 0000000000000000000000011111010
    Cela fait : 0 * 2^30 + ... + 0 * 2^8 + 1 * 2^7 + 1 * 2^6 + 1 *2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0, donc en base 10 : 250.

    L'opérateur >>> est identique à l'opérateur >> pour les nombres positifs, c'est-à-dire que 2006 >>> 3 = 250.

    Prenons maintenant le nombre -2006. Comment on l'écrit en binaire ? C'est un peu plus compliqué : il faut partir de 2006 écrit en binaire, prendre l'opposé binaire (i.e. on remplace les 0 par des 1 et vice-versa), puis rajouter 1. Let's go !
    On prend l'opposé binaire de 2006 : 1111111111111111111100000101001
    On rajoute 1 : 1111111111111111111100000101010

    Selon la règle énoncée en italique, -2006 >> 3 donne : 1111111111111111111111100000101
    Pour savoir combien fait ce nombre en valeur absolue, on retire 1 et on prend l'opposé binaire, soit : 00000000000000000000000011111011. Ce nombre est égal à 251, donc notre nombre vaut -251.

    -2006 >>> 3, au contraire, donne : 00011111111111111111111100000101.
    C'est un nombre positif égal à : 1 * 2^28 + ... + 1 * 2^8 + 0 * 2^7 + 0 * 2^6 + 0* 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0, soit 536870661.

    Vous pouvez vérifier tout ça par vous-mêmes ! Le décalage vers la gauche existe aussi, c'est <<.

    Maintenant, mon problème, c'est de comprendre pourquoi la valeur d'un entier décalé sur plus de 32 bits n'est pas nulle ; c'était l'exemple 500 >> 100.

    Voili voilà merci pour votre aide

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 56
    Par défaut
    Ah j'ai compris.
    En fait quand on fait x >> y, java exécute x >> (y%32). Autrement dit, 500 >> 100 = 500 >> 68 = 500 >> 36 = 500 >> 4 = 31.

    ++

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

Discussions similaires

  1. [Débutant] Fonctionnement ResourceManager
    Par HaTnuX dans le forum Langage
    Réponses: 1
    Dernier message: 27/06/2007, 01h32
  2. Réponses: 4
    Dernier message: 13/02/2007, 16h32
  3. [Débutant] Fonctionnement de Window.open
    Par Benzeghiba dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/09/2006, 13h44
  4. Réponses: 8
    Dernier message: 29/08/2006, 01h56
  5. Réponses: 21
    Dernier message: 04/04/2006, 12h30

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