Il y a une variable qui contient des drapeaux et je veux en supprimer un. Mais je ne sais pas comment l'enlever.
Voici comment je mets le drapeau.
my.emask |= ENABLE_SHOOT;
Il y a une variable qui contient des drapeaux et je veux en supprimer un. Mais je ne sais pas comment l'enlever.
Voici comment je mets le drapeau.
my.emask |= ENABLE_SHOOT;
Réponse Courte
Vous voulez faire un bit à Bit ET de l'opération sur la valeur actuelle avec une not au niveau du Bit fonctionnement de l' indicateur que vous souhaitez annuler. Un not au niveau du Bit inverse tous les bits (c'est à dire 0 => 1, 1 => 0).
flags = flags & ~MASK;
ou flags &= ~MASK;
.
Réponse Longue
ENABLE_WALK = 0 // 00000000
ENABLE_RUN = 1 // 00000001
ENABLE_SHOOT = 2 // 00000010
ENABLE_SHOOTRUN = 3 // 00000011
value = ENABLE_RUN // 00000001
value |= ENABLE_SHOOT // 00000011 or same as ENABLE_SHOOTRUN
Lorsque vous effectuez une opération de bits ET avec not au niveau du Bit de la valeur que vous souhaitez annuler.
value = value & ~ENABLE_SHOOT // 00000001
vous êtes en train de faire:
0 0 0 0 0 0 1 1 (current value)
& 1 1 1 1 1 1 0 1 (~ENABLE_SHOOT)
---------------
0 0 0 0 0 0 0 1 (result)
Il est important de noter que si la variable manipulée est plus grande qu'un entier, la valeur utilisée dans l'expression 'et non' doit l'être également. En fait, on peut parfois se permettre d'utiliser des types plus petits, mais il existe suffisamment de cas étranges pour qu'il soit probablement préférable d'utiliser des suffixes de type pour s'assurer que les constantes sont suffisamment grandes.
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.