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 -
[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 ?
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
- Desinstaller application windows - Guide
- Application word et excel gratuit - 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