Istnieje zmienna, która zawiera kilka flag i chcę usunąć jedną z nich. Ale nie wiem, jak to usunąć.
Oto jak ustawiłem flagę.
my.emask |= ENABLE_SHOOT;
c
bit-manipulation
flags
Aaron de Windt
źródło
źródło
Odpowiedzi:
Krótka odpowiedź
Chcesz wykonać operację Bitwise AND na bieżącej wartości z operacją Bitwise NOT flagi, którą chcesz cofnąć . Bitowe NIE odwraca każdego bitu (tj. 0 => 1, 1 => 0).
flags = flags & ~MASK;
lubflags &= ~MASK;
.Długa odpowiedź
Kiedy wykonujesz Bitwise AND z Bitwise NOT wartości, którą chcesz cofnąć.
faktycznie robisz:
źródło
notification.sound ^= Notification.DEFAULT_SOUND;
aby wyczyścić kilka flag:
źródło
Należy zauważyć, że jeśli przetwarzana zmienna jest większa niż liczba int, wartość użyta w wyrażeniu „and not” również musi być. Właściwie czasami można uciec od używania mniejszych typów, ale jest wystarczająco dużo dziwnych przypadków, że prawdopodobnie najlepiej jest użyć sufiksów typów, aby upewnić się, że stałe są wystarczająco duże.
źródło
flags -= flags & MY_FLAG;
(lub^=
jeśli wolisz).