Ответ 1
Это очень хорошо, так как флаги бит проверяются на большинстве поддерживающих их языков.
Например:
#define BIT_7 0x80
#define BITS_0_AND_1 0x03
if ((flag & BIT_7) == BIT_7) ...
if ((flag & BITS_0_AND_1) == BITS_0_AND_1) ...
Пока вы можете проверить что-то вроде первого:
if ((flag & BIT_7) != 0) ...
который фактически не будет работать для второго, поскольку он вернет true, если один из битов установлен, а не оба.
Для полноты, C позволяет установить бит-маски с помощью:
flag = flag | BIT_7; // or you can also use 'flag |= BIT_7'
Вы можете очистить их с помощью:
flag = flag & (~BIT_7);
И переключите их с помощью:
flag = flag ^ BIT_7;