Vous êtes probablement familier avec le système enum
de bitmask, comme:si (masque & VALUE) ou si ((masque & VALUE) == VALUE)?
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
J'ai vu beaucoup de code qui teste ensuite pour un certain bit dans le masque comme
if ((mask & FLAG3) == FLAG3)
Mais ISN n'est-ce pas équivalent?
if (mask & FLAG3)
Y a-t-il une raison d'utiliser la première version? À mon avis, la deuxième version plus courte est plus lisible.
Peut-être des habitudes de restes des programmeurs C qui pensent que les vraies valeurs devraient être converties en 1
? (Bien que même là, la version plus fait plus de sens dans une cession ou une déclaration return
que dans un test de déclaration conditionnelle.)
Faites-le maintenant avec le masque & ALL_FLAGS. Ce n'est plus la même chose. –
'==' a une priorité supérieure à '&', vous avez donc besoin de parenthèses dans votre condition: 'if ((mask & FLAG3) == FLAG3)'. – casablanca