Битовые поля C++
Классы и структуры могут содержать члены, которые занимают меньше памяти, чем объединенного типа.Эти элементы определяются как битовые поля.Синтаксис для бит-поля участник-декларатор спецификация выполните:
declarator : constant-expression
Заметки
(Необязательно) declarator имя, под которым участник получить доступ в программе.Должно быть объединенным типом (в том числе перечисленных типов).константное выражение указывает число битов элемент занимает место в структуре.Анонимные битового поля, т е элементы бит-поля без идентификатора - можно использовать для заполнения.
Примечание |
---|
Анонимное битовое поле шириной 0 обеспечивает следующие битовые поля к следующему выравнивание type граница, где type тип элемента. |
В следующем примере объявляется структуру, содержащий битовые поля:
// bit_fields1.cpp
// compile with: /LD
struct Date {
unsigned short nWeekDay : 3; // 0..7 (3 bits)
unsigned short nMonthDay : 6; // 0..31 (6 bits)
unsigned short nMonth : 5; // 0..12 (5 bits)
unsigned short nYear : 8; // 0..100 (8 bits)
};
Концептуальная структура памяти объекта типа Date показано на следующем рисунке.
Структура памяти объекта даты
Обратите внимание, что nYear 8 бит длиной и переполнили бы граница машинного слова объявленного типа, unsigned short.Поэтому он разработан в начале новой unsigned short.Битовые поля не требуется, что все подходящие в одном объекте базового типа; новые единицы хранения выбираются в соответствии с количеством бит в объявлении запрошенного.
Только для систем Microsoft
Упорядочение данных, объявленных в качестве битового поля из низкого уровня в старшему биту, как показано на рисунке выше.
ЭЛЕМЕНТ, относящийся Майкрософт
Если объявление структуры содержит безымянное поле длиной 0, как показано в следующем примере,
// bit_fields2.cpp
// compile with: /LD
struct Date {
unsigned nWeekDay : 3; // 0..7 (3 bits)
unsigned nMonthDay : 6; // 0..31 (6 bits)
unsigned : 0; // Force alignment to next boundary.
unsigned nMonth : 5; // 0..12 (5 bits)
unsigned nYear : 8; // 0..100 (8 bits)
};
структура памяти как показано на следующем рисунке.
Структура объекта даты битовое поле с нулевой длиной
Базовый тип битового поля должен быть объединенным типом, как описано в разделе Базовые типы.