Есть переменная, которая содержит некоторые флаги, и я хочу удалить один из них. Но я не знаю, как это удалить.
Вот как я установил флаг.
my.emask |= ENABLE_SHOOT;
c
bit-manipulation
flags
Аарон де Виндт
источник
источник
Ответы:
Короткий ответ
Вы хотите выполнить побитовую операцию И для текущего значения с побитовой операцией НЕ для флага, который хотите сбросить . Побитовое НЕ инвертирует каждый бит (то есть 0 => 1, 1 => 0).
flags = flags & ~MASK;
илиflags &= ~MASK;
.Длинный ответ
Когда вы выполняете побитовое И с побитовым НЕ значение, которое вы хотите сбросить.
вы на самом деле делаете:
источник
notification.sound ^= Notification.DEFAULT_SOUND;
очистить несколько флагов:
источник
Важно отметить, что если манипулируемая переменная больше, чем int, значение, используемое в выражении «а не», также должно быть. На самом деле, иногда можно избежать использования меньших типов, но есть достаточно странных случаев, когда, вероятно, лучше использовать суффиксы типов, чтобы убедиться, что константы достаточно велики.
источник
flags -= flags & MY_FLAG;
(или,^=
если хотите).