Il existe une variable qui contient certains indicateurs et je souhaite en supprimer un. Mais je ne sais pas comment le supprimer.
Voici comment j'ai mis le drapeau.
my.emask |= ENABLE_SHOOT;
c
bit-manipulation
flags
Aaron de Windt
la source
la source
Réponses:
Réponse courte
Vous souhaitez effectuer une opération ET au niveau du bit sur la valeur actuelle avec une opération NON au niveau du bit de l' indicateur que vous souhaitez annuler . Un NOT au niveau du bit inverse chaque bit (c'est-à-dire 0 => 1, 1 => 0).
flags = flags & ~MASK;
ouflags &= ~MASK;
.Longue réponse
Lorsque vous effectuez un ET au niveau du bit avec PAS au niveau du bit de la valeur que vous souhaitez annuler.
vous faites réellement:
la source
notification.sound ^= Notification.DEFAULT_SOUND;
pour effacer quelques drapeaux:
la source
Il est important de noter que si la variable manipulée est plus grande qu'un int, la valeur utilisée dans l'expression 'and not' doit l'être également. En fait, on peut parfois s'en tirer en utilisant des types plus petits, mais il y a 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.
la source
flags -= flags & MY_FLAG;
(ou^=
si vous préférez).