Элементом структуры может быть битовое поле, обеспечивающее доступ к отдельным битам памяти. Вне структур битовые поля объявлять нельзя. Нельзя также организовывать массивы битовых полей и нельзя применять к полям операцию определения адреса. В общем случае тип структуры с битовым полем задается в следующем виде:
struct {
идентификатор 1 : длина-поля 1;
идентификатор 2 : длина-поля 2;
…
}
идентификатор – один из базовых целых типов int, unsigned int (unsigned), signet int (signed), char, short, long и их знаковые и беззнаковые варианты.
длинна - поля задается целым выражением или константой. Эта константа определяет число битов, отведенное соответствующему полю. Поле нулевой длинны обозначает выравнивание на границу следующего слова.
Пример:
struct {
unsigned a1 : 1;
unsigned a2 : 2;
unsigned a3 : 5;
unsigned a4 : 2;
} prim;
Структуры битовых полей могут содержать и знаковые компоненты. Такие компоненты автоматически размещаются на соответствующих границах слов, при этом некоторые биты слов могут оставаться неиспользованными.
При определении битового поля разрешается не указывать его имя, в этом случае (указаны только двоеточие и длина) в структуру вводятся неиспользуемые (недоступные) биты, формирующие промежуток между значимыми полями.
Ссылки на поле битов выполняются точно так же, как и компоненты общих структур. Само же битовое поле рассматривается как целое число, максимальное значение которого определяется длиной поля.