Я пытаюсь узнать больше об этом для реализации в моем проекте.Простые булевы операторы для бит-флагов
я в настоящее время получили это в основном:
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");
Я не могу найти какие-либо ресурсы из моих недавних поисков, которые относятся к этому, я хочу, чтобы научиться этому, чтобы учить других, я действительно заинтересован. Прошу прощения, если это запутанно или просто.
Я был прав в первый раз, спасибо! – John
Несомненно, без проблем. Поразрядные операторы - забавные. :) – cdhowie
Теперь, как бы проверить, установлены ли два флага без булевых и? например 'if (flags & (0x1 | 0x2))', но это работает, даже если я только установил '0x1' .. – John