Вы используете побитовые логические операции и сдвиг битов.(Поиск этих терминов в Google может дать вам несколько примеров.)
По сути, вы объявляете целочисленный тип (включая int
, char
и т. Д.), Затем вы "сдвигаете" целочисленные значения в битвы хотите, затем вы делаете OR или AND с целым числом.
Несколько быстрых иллюстративных примеров (на C ++):
inline bool bit_is_on(int bit_array, int bit_number)
{
return ((bit_array) & (1 << bit_number)) ? true : false;
}
inline void set_bit(int &bit_array, int bit_number)
{
bit_array |= (1 << bit_number);
}
inline void clear_bit(int &bit_array, int bit_number)
{
bit_array &= ~(1 << bit_number);
}
Обратите внимание, что это обеспечивает "битовые массивы" постоянного размера(sizeof(int) * 8
бит).Может быть, это нормально для вас, или, может быть, вы захотите что-то построить поверх этого.(Или повторно используйте все, что предоставляет некоторая библиотека.)
Это будет использовать меньше памяти, чем массивы bool
... ОДНАКО ... Код, сгенерированный компилятором для доступа к этим битам, будет больше и медленнее.Поэтому, если у вас нет большого количества объектов, которые должны содержать эти битовые массивы, это может оказать отрицательное влияние как на скорость, так и на использование памяти.