Простые логические операторы для бита flags

Я пытаюсь узнать больше об этом, чтобы реализовать в моем проекте.

В настоящее время я получил это в основном:

unsigned char flags = 0; //8 bits

flags |= 0x2; //apply random flag

if(flags & 0x2) {
   printf("Opt 2 set");
}

Теперь я хочу сделать немного более сложные вещи, я хочу применить три таких флага:

flags = (0x1 | 0x2 | 0x4);

А затем удалить из него флаги 0x1 и 0x2 ? Я думал, что могу сделать что-то вроде этого, применяя побитовое НЕ (и побитовое И, чтобы применить его):

flags &= ~(0x1 | 0x2);

По-видимому, они остаются там или что-то в любом случае, когда я проверяю.

Я также не знаю, как проверить, НЕ существуют ли они в битовых флагах (поэтому я не могу проверить, работает ли мой предыдущий код), это было бы что-то вроде этого?

if(flags & ~0x2) 
    printf("flag 2 not set");

Я не могу найти какие-либо ресурсы из моих недавних поисков, которые относятся к этому, я хочу изучить это, чтобы научить других, мне действительно интересно. Прошу прощения, если это сбивает с толку или просто.

8
задан John 15 November 2010 в 20:16
поделиться