Application de masque et condition if

Résolu
Bonjour,

Je me trouve actuellement devant une ligne de code faisant du rétro-ingineering et je n'arrive pas à savoir s'il est possible que cette condition soit vraie ?

if((MessageInformation.couleur) & 0x8000)

est-ce qu'ici on observe uniquement le premier bit ou bien tous ?

car on aura quelque chose du type:
Si MessageInformation.couleur = 0xFABC
0xFABC & 0x8000 = 0x8000


3 réponses

  1. Contributeur
    Salut le père. et Kitépat,

    Juste pour compléter la réponse de le père., en répondant aussi à la question suivante de Kitépat :

    est-ce qu'ici on observe uniquement le premier bit ou bien tous ?

    0x8000 équivaut à 1000000000000000

    Le & étant l'opérateur AND logique, le résultat de (MessageInformation.couleur & 0x8000) sera 1000000000000000 si le "premier" bit correspondant à ce masque est aussi à 1, et sera 0000000000000000 si ce "premier" bit correspondant à ce masque est à 0.

    https://fr.wikipedia.org/wiki/Table_de_v%C3%A9rit%C3%A9

    Donc, 0xFABC, qui est 1111101010111100 en binaire, renvoie effectivement 1000000000000000 (évalué à vrai en C, car différent de zéro, comme indiqué par le père.) car le "premier" bit est à 1.

    Donc, if ((MessageInformation.couleur) & 0x8000) est bien évalué à "vrai" si le "premier" bit de MessageInformation.couleur est 1, et la valeur des bits autres que le "premier" n'a pas d'incidence sur le résultat du test "if".

    Dal
    1. Bonjour

      Petit rappel : en C, une expression est fausse si elle vaut 0 et vraie si elle vaut autre chose que 0.
      Dans la mesure ou tu as indiqué toi-même que ton expression pouvait valoir 0x8000, alors oui, ton expression peut être vraie.