Объявление битовых полей

Элементом структуры может быть битовое поле, обеспечивающее доступ к отдельным битам памяти. Вне структур или объединений битовые поля объявлять нельзя. Нельзя также организовывать массивы битовых полей и нельзя применять к полям операцию определения адреса или получить ссылку на них.

Синтаксис объявления типа структуры с битовыми полями:

struct [ИмяСтруктуры] { Тип1 ИмяПоля1 : ШиринаПоля1

Тип2 ИмяПоля2 : ШиринаПоля2

........................

ТипN ИмяПоляN : ШиринаПоляN

} ИмяСтруктуры;

где struct – спецификатор типа;

ИмяСтруктуры – идентификатор;

Тип1, ... ТипN – тип поля, который может быть только int, возможно, со спецификатором unsigned или signed;

ИмяПоля – идентификатор поля;

ШиринаПоля (длина) – целое неотрицательное десятичное число, значение которого обычно (в зависимости от реализации компилятора) не должно превышать длины машинного слова.

Например:

struct {

int c1 : 4;

int c2 : 12;

} ab;

Битовые поля длиной 1 должны объявляться как unsigned, поскольку 1 бит не может иметь знака. Битовые поля могут иметь длину от 1 до 16 бит для 16-битных сред и от 1 до 32 бит для 32-битных сред.

Разрешается поле без имени (для этого надо указать только двоеточие и ширину), с помощью которого в структуру вводятся неиспользуемые биты (промежуток между значимыми полями). Нулевая ширина поля вводится, когда необходимо, чтобы следующее в данной структуре поле разместилось с начала очередного машинного слова.

Например, если нам нужны только биты cts и dsr, то можно объявить структуру status_type следующим образом:

struct status_type {

unsigned : 4;

unsigned cts :1;

unsigned dsr :4;

} status;

В структуре можно смешивать «обычные» элементы с битовыми полями.

Например:

struct emp {

struct addr address;

float pay;

unsigned lay_off: 1; //работает или нет

unsigned hourly: 1;//почасовая оплата или оклад

unsigned deductions : 3; //удержание налога

};

Эта структура определяет запись по каждому служащему, в которой используется только один байт для хранения трех элементов информации: статус служащего, характер оплаты его труда и налоговая ставка. Без использования битовых полей для хранения этой информации пришлось бы занять три байта.

Вместо служебного слова struct можно употреблять union. В этом случае определяется объединение с битовыми полями. Битовые поля в объединениях используются для доступа к нужным битам того или иного объекта, входящего в объединение.

Пример 1. В программе объединение позволяет сформировать код символа 'D' (равный 68):

#include <iostream.h>

union { char simb;

struct { int x:5;

int y:3;

} hh;

} cod;

void main() {

cod.hh.x = 4;

cod.hh.y = 2;

cout << cod.simb; // выводит на экран символ 'D'

}

 








Дата добавления: 2015-02-16; просмотров: 544;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.