ВУЗ:
Составители:
Рубрика:
} переменная_объединение;
Обращение к полям объединений осуществляется с помощью уточненных имен:
имя_объединения.имя_элемента;
Определение указателей на объединения и работа с ними осуществляется аналогично подобным
операциям со структурами.
11.4 Битовые поля структур и объединений
В составе структур и объединений могут в качестве компонентов использоваться битовые поля.
Каждое такое поле представляет собой целочисленное значение, занимающее в памяти фиксированное
число битов. Битовые поля не имеют адресов, а следовательно, они не могут объединяться в массивы,
на них нельзя объявить указатель. Главное назначение битовых полей – обеспечение удобного доступа
к отдельным битам. Определение структуры с битовыми полями в языке С выглядит следующим обра-
зом:
struct
{
тип_поля1 имя_поля1 : ширина_поля;
тип_поля2 имя_поля2 : ширина_поля;
…
тип_поляn имя_поляn : ширина_поля;
} имя_структуры;
здесь тип_поля – целочисленный тип данных; ширина_поля – целое десятичное число без знака.
Обращение к битовым полям структур и объединений осуществляется так же, как и к их обычным
полям (см. раздел 1.2).
Рис. 8 Размещение битовых полей в структуре без выравнивания
П р и м е р 20
struct
{
short a: 12;
short b: 10;
} Pr;
Существуют два варианта размещения битовых полей в оперативной памяти ЭВМ. Если в структу-
ре или объединении нет дополнительных управляющих элементов, то битовые поля будут расположены
компилятором друг за другом. Рассмотрим пример 20. В структуре Pr определены два поля. Общая
длина структуры составляет четыре байта, однако, использовать для хранения информации можно
только первые двадцать два бита. Остальные биты остаются неиспользуемыми. Этот порядок размеще-
ния полей проиллюстрирован на рис. 8.
Часто реализация компиляторов позволяет изменить порядок размещения битовых полей: их можно
выравнивать по границам байтов. Для выравнивания битовых полей в структуру вводят неиспользуе-
мые биты, формирующие промежуток между полями. Для их создания вводят поля без имени.
b : 10 a : 12
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
