У меня есть 65 различных флагов (опций) для пользовательской структуры данных. В настоящее время это выглядит так:
struct CustomDataStruct {
int Something;
unsigned char Flags[9]
};
Таким образом, я могу хранить до 72 флагов (7 оставшихся на всякий случай, если я решу добавить еще). Я хочу использовать отдельный бит для каждого флага, поэтому я придумал это:
void SetFlag(struct CustomDataStructure* Struct, int FlagNr) {
// Error checking and other stuff here
int index = FlagNr / 8; array.
Struct->Flags[index] |= 1 << (__________);
}
Я уже пробовал с 1 << (FlagNr % 8)
, но он не устанавливает правильный бит. Например, я хочу включить флаг ID 23 (начиная с нуля), поэтому я вызываю SetFlag(structInstance, 23)
, который правильно определяет индекс (Flags [2]), но 23 % 8
= 7
и 1 << 7
= 1000 0000
(в двоичном виде) вместо правильного значения, которое должно быть 0000 0001
(включить последний бит 3-го числа массива, т. Е. Бит № 24).
Флаги должны храниться в этом массиве, каждый бит представляет переключатель флага. Изменить это не вариант.