2 ответов:
Чтобы очистить флаг, вы обычно
ANDс его дополнением , например, в C и родственных языках:x = 5; // x = 0101 x = x & ~C; // x = x & 1011 = 0101 & 1011 = 0001Примечание: это можно выразить несколько более кратко следующим образом:
x &= ~C;Альтернативно, если вы уже знаете, что определенный бит равен 1, и вы хотите установить его в 0, то вы можете просто переключить (инвертировать) его с помощью XOR:
x = x ^ C; // x = x ^ 0100 = 0101 ^ 0100 = 0001Или:
x ^= C;
Мое решение таково:
1) Проверка, установлен бит
flag & C == C2) Если бит установлен применить операцию XOR:
flag ^ CТеперь мой флаг - 5 (0001).
Может быть, есть более простые решения?
Comments