Удалить биты из числа



У меня есть некоторый битный флаг, где:



A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)


Я хотел бы установить бит A и C в моем флаге: flag = A | C



Теперь мой флаг-5 (0101).



Мне нужно удалить немного с флагом. Как я могу это сделать?

658   2  

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 == C

2) Если бит установлен применить операцию XOR:

flag ^ C

Теперь мой флаг - 5 (0001).

Может быть, есть более простые решения?

Comments

    Ничего не найдено.