На этом шаге мы приведем общие сведения о битовых полях.
Битовые поля моделируют массивы битов (логических величии) фиксированного размера. Они часто используются для выполнения операций с наборами независимых флагов. В программах на языке С, а также в старых программах C++ массив битов обычно представляется типом long, а операции с битами выполняются при помощи поразрядных операторов (таких, как &, [ и ~). Основные достоинства класса bitset - произвольный размер битового поля и поддержка дополнительных операций (например, присваивание значений отдельных битов, чтение и запись битовых полей как последовательности нулей и единиц).
Количество битов в битовом поле остается неизменным, поскольку оно передается в параметре шаблона. Если вам потребуется контейнер с переменным количеством битов, воспользуйтесь классом vector<bool> (смотри шаг 140).
Класс bitset определяется в заголовочном файле <bitset>:
#include <bitset>
В файле <bitset> класс bitset определяется в виде шаблона, которому в параметре передается размер поля в битах:
namespace std {
template <size_t Bits>
class bitset;
}
В данном случае в параметре шаблона передается не тип, а беззнаковое целое значение (эта возможность рассматривается на шаге 30).
Шаблоны с разными аргументами определяют разные типы. Сравнение и комбинирование битовых полей разрешено только для полей с одинаковыми значениями аргумента шаблона.
Со следующего шага мы начнем рассматривать примеры использования битовых полей.