Как и где можно уместить 32 битовых флага?
Насколько я понимаю, unsigned char может вместить в себя 8 флагов, а что можно придумать, чтобы уместить 32 флага?
Насколько я понимаю, unsigned char может вместить в себя 8 флагов, а что можно придумать, чтобы уместить 32 флага?
Раз у вас С++, используйте тип из стандартной библиотеки, который по сути для этого и предназначен — bitset<>
, который обеспечивает именно хранение набора битовых флагов.
Тридцать два? Без проблем: bitset<32> bs
...
Установить k-й бит? bs.set(k)
Получить k-й бит? bs[k]
Работать с конкретными целочисленными типами можно, конечно... Но это подход из С, а не С++.
Как я бы сделал на твоем месте. 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;
}