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. 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.
    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