Флажки упаковки с |
и &
работают лучше всего, когда вы используете преимущества двоичной кодировки компьютера.
Итак, используя степени 2 (здесь в десятичном представлении):
enum Things
{
Something = 1,
SomethingElse = 2,
SomethingMore = 4,
SomethingHuge = 8
};
Это позволяет каждому флагу быть представленным исключительно одним битом целого числа, позволяя активировать и деактивировать каждый из них по отдельности.
В результате:
char x = 0;
x |= Something; // x in binary looks like 00000001
x |= SomethingMore; // x in binary looks like 00001001
x &= ~Something; // x in binary looks like 00001000
Я надеюсь, что это имеет смысл.