Битовые поля
Поразрядные операции позволяют работать с отдельными битами и их группами (полями) внутри переменных (см.4.8). Аналогичные возможности дают элементы структуры, называемые битовыми полями
.
struct man
{ // 15 9 8 5 4 0
char name[20]; // ---------------------------------
unsigned dd:5; // | yy | mm | dd |
unsigned mm:4; // ---------------------------------
unsigned yy:7;
char *address; // 15 11 10 8 7 3 2 0
int xx:3; // ---------------------------------
int :5; // | | zz | ... | xx |
int zz:3; // ---------------------------------
};
Любая последовательность элементов структуры типа int или unsigned, в которой за каждым именем элемента следует двоеточие и целая константа, размещаются в отдельном машинном слове в виде групп битов (битовых полей). Константа определяет разрядность битового поля. Допустимая размерность машинного слова, в котором размещаются битовые поля, ограничивается транслятором. Допускается использование безымянных полей, которые в таком случае являются недоступными. Операции с битовыми полями ничем не отличаются по синтаксису от подобных операций с обычными элементами структуры. Естественно, что транслятор формирует команды, обеспечивающие маскирование, сдвиги и другие поразрядные операции, необходимые для превращения значения битового поля в значение обычной целой переменной без знака:
A.dd = 12; A.mm = 5; A.yy=96; A.dd++; A.zz = A.xx;