Es gibt eine Variable, die einige Flags enthält, und ich möchte eines davon entfernen. Aber ich weiß nicht, wie ich es entfernen soll.
So setze ich die Flagge.
my.emask |= ENABLE_SHOOT;
c
bit-manipulation
flags
Aaron de Windt
quelle
quelle
Antworten:
Kurze Antwort
Sie möchten eine bitweise UND- Operation für den aktuellen Wert mit einer bitweisen NICHT- Operation des Flags ausführen, das Sie deaktivieren möchten . Ein bitweises NICHT invertiert jedes Bit (dh 0 => 1, 1 => 0).
flags = flags & ~MASK;
oderflags &= ~MASK;
.Lange Antwort
Wenn Sie ein bitweises UND mit bitweisem NICHT des Wertes ausführen, den Sie deaktivieren möchten.
Sie tun tatsächlich:
quelle
notification.sound ^= Notification.DEFAULT_SOUND;
um ein paar Flaggen zu löschen:
quelle
Es ist wichtig zu beachten, dass, wenn die zu manipulierende Variable größer als ein int ist, auch der im Ausdruck 'und nicht' verwendete Wert sein muss. Eigentlich kann man manchmal mit kleineren Typen davonkommen, aber es gibt genug seltsame Fälle, in denen es wahrscheinlich am besten ist, Typensuffixe zu verwenden, um sicherzustellen, dass die Konstanten groß genug sind.
quelle
flags -= flags & MY_FLAG;
(oder^=
wenn Sie es vorziehen).