Подтвердить что ты не робот

Побитовая проверка наличия флага

Существует ли метод, обычно используемый для проверки наличия флага в int/другом типе данных? Я понял что-то вроде этого:

if ((host&flagtocheckfor)==flagtocheckfor)

Что работает отлично, однако, такой распространенный метод установки флагов - это то, как флаги обычно проверяются? Или есть более сжатый метод?

4b9b3361

Ответ 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;