Application de masque et condition if
Résolu
Kitépat
Messages postés
2
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
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 ?
est-ce qu'ici on observe uniquement le premier bit ou bien tous ?
car on aura quelque chose du type:
Si MessageInformation.couleur = 0xFABC
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
A voir également:
- Application de masque et condition if
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Numero masque - Guide
- Excel cellule couleur si condition texte - Guide
- Application word et excel gratuit - Guide
- Desinstaller application windows - Guide
3 réponses
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.
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.
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
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