Как и где можно уместить 32 битовых флага?

Рейтинг: 0Ответов: 2Опубликовано: 19.01.2023

Насколько я понимаю, unsigned char может вместить в себя 8 флагов, а что можно придумать, чтобы уместить 32 флага?

Ответы

▲ 2Принят

Раз у вас С++, используйте тип из стандартной библиотеки, который по сути для этого и предназначен — bitset<>, который обеспечивает именно хранение набора битовых флагов.

Тридцать два? Без проблем: bitset<32> bs...

Установить k-й бит? bs.set(k)

Получить k-й бит? bs[k]

Работать с конкретными целочисленными типами можно, конечно... Но это подход из С, а не С++.

▲ 1

Как я бы сделал на твоем месте. Cоздал объект std::bitset с размером 32 бита, чтобы хранить 32 флага:

std::bitset<32> flags;

Далее возьми переменные типа unsigned int или unsigned long, они обычно весят 32 бита:

unsigned int flags = 0;
// установить флаг номер 0
flags |= 1 << 0;
// сбросить флаг номер 5
flags &= ~(1 << 5);

Если это не поможет, возьми классы или структуры с битовыми полями, чтобы уместить более 32 флага в одной переменной:

struct Flags{
  unsigned int flag0 : 1;
  unsigned int flag1 : 1;
  unsigned int flag2 : 1;
  ...
  unsigned int flag31 : 1;
}