2013-03-13 3 views
3

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

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

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

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

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

ответ

5

Для того чтобы выслать флаг, вы, как правило, 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; 
0

Мое решение:

1) Проверьте, является бит установлен

flag & C == C 

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

flag^C 

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

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