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

 C Discussion :

Shift operator comment ca marche


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut Shift operator comment ca marche
    Je cherche a connaitre la syntaxe et l'utilisation du shift binaire.
    Par example que me retourne l'expression P&(1<<Z) et l'expression P|=(1<<Z) ?
    Z est t'il bien le nombre de bits utilises par le shift << ?
    Comment P et Z doivent ils etre declares si Z est un bit du registre P ?
    Merci

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Salut Druyd pour comprendre cela je te conseille de revoir les bases de l'arithmétique binaire et hexadécimale.
    A noter que l'opérateur de décalage << correspond à des instructions assembleurs x86 comme SHR par exemple
    Cet opérateur << va décaler les bits vers la gauche donc tu vas multiplier par 2^n ou est n est la position.
    Par exemple 7 équivaut à 00111 en binaire
    Si tu prends une variable b=7
    Si tu fais un décalage sur b de <<2 alors b équivaudra à 11000 en binaire
    Le fait d'utiliser l'opérateur unaire & donnera une valeur qui ne prendra en compte que les positions des opérandes qui sont à 1.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Salut Druyd pour comprendre cela je te conseille de revoir les bases de l'arithmétique binaire et hexadécimale.
    A noter que l'opérateur de décalage << correspond à des instructions assembleurs x86 comme SHR par exemple
    Cet opérateur << va décaler les bits vers la gauche donc tu vas multiplier par 2^n ou est n est la position.
    Par exemple 7 équivaut à 00111 en binaire
    Si tu prends une variable b=7
    Si tu fais un décalage sur b de <<2 alors b équivaudra à 11000 en binaire
    Le fait d'utiliser l'opérateur unaire & donnera une valeur qui ne prendra en compte que les positions des opérandes qui sont à 1.
    Merci pour la reponse.
    Je comprend bien le concept du shift. Je m'interroge sur la valeur que peut avoir l'operande de droite. Par exemple dans l'expression a<<b en language C.
    si a=7 ou 00000111 en binaire.
    et b=7 ou 00000111 en binaire.
    que donnera a<<b ?
    est ce 10000000 ? avec troncature des 2 premiers '1'

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ca va dépendre du type de a...

    si a et b sont des entiers (longs ou courts), a=7, b=7, a<<b = 7*2^7 = 896

    Francois

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Salut c'est François qui donne la bonne réponse.

    Voilà ce que dit le MSDN pour Visual C++

    Grammar

    shift-expression :
    additive-expression
    shift-expression << additive-expression
    shift-expression >> additive-expression
    The bitwise shift operators are:

    Right shift (>>)
    Left shift (<<)
    These binary operators have left-to-right associativity.

    Both operands of the shift operators must be of integral types. Integral promotions are performed according to the rules described in Integral Promotions. The type of the result is the same as the type of the left operand. The value of a right-shift expression e1 >> e2 is e1 / 2e2, and the value of a left-shift expression e1 << e2 is e1 * 2e2.

    The results are undefined if the right operand of a shift expression is negative or if the right operand is greater than or equal to the number of bits in the (promoted) left operand.

    The left shift operator causes the bit pattern in the first operand to be shifted left the number of bits specified by the second operand. Bits vacated by the shift operation are zero-filled. This is a logical shift, as opposed to a shift-and-rotate operation.

    The right shift operator causes the bit pattern in the first operand to be shifted right the number of bits specified by the second operand. Bits vacated by the shift operation are zero-filled for unsigned quantities. For signed quantities, the sign bit is propagated into the vacated bit positions. The shift is a logical shift if the left operand is an unsigned quantity; otherwise, it is an arithmetic shift.

    Microsoft Specific
    The result of a right shift of a signed negative quantity is implementation dependent.
    Although Microsoft C++ propagates the most-significant bit to fill vacated bit positions, there is no guarantee that other implementations will do likewise.

    END Microsoft Specific

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/02/2004, 21h39
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

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