5 votes

Arduino et Bitwise, résultat inattendu

Je m'embrouille un peu ici.

Je voudrais tester si un ensemble de bits (3 bits) contient un bit dans une certaine position.

if (B110 & B010 == B010)

(B110 étant le numéro à vérifier, B010 le bit dont je veux voir s'il est là)

Le code ci-dessus ne me donne pas le résultat attendu, B110 est vrai et B101 est vrai. Je suis presque sûr que je dois utiliser un &(and) pour tester avec le masque B010.

Si je comprends bien, B110 et B010 seraient égaux à B010 et B101 et B010 seraient égaux à B000. Mais mon instruction if est exécutée avec les deux bits de test ?

Je code dans un Arduino, je suis sûr que c'est un simple malentendu de ma part mais je ne sais pas où.

12voto

Majenko Points 722

Essayez if ((B110 & B010) == B010)

Pour le moment, il fonctionne comme if (B110 & (B010 == B010)) ce qui sera toujours vrai.

Comme ce tableau montre, \== y != ont une priorité plus élevée que & , | etc.

3voto

spwert Points 98

Le " == B010 "est en fait inutile dans ce test. En C, 0 représente "faux", tandis que toute valeur non nulle est considérée comme "vrai". B110 & B010 (ou toute autre valeur avec ce bit activé) retournera B010 qui n'est pas égal à 0 et le test est donc réussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X