Application de masque et condition if

Résolu
Kitépat Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
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

Utilisateur anonyme
 
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.
0
Kitépat Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour la réponse rapide et complète ;)
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
0