Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

Побитовое описание полей структуры.

При описании структуры возможно также побитовое описание полей (элементов), т.е. описание длины элементов структуры с точностью до бита. Это обеспечивается с помощью дополнительного суффикса ":n" и типа int где n – количество бит, отведённых под данное поле. Например:

struct st1

{

int a:3;

int b:4;

int c:5;

char d;

}

При этом под переменную a в структуре отводится 3 бита, под переменную b – 4 бита, под переменную c – 5 бит. Для переменных a,b и c будет выделено ровно столько бит памяти, сколько указано, но в целом последний элемент с побитовой записью будет дополнен таким количеством бит и байтов (с нулевыми значениями), чтобы его длина соответствовала длине типа int (для платформы Win32 дополнение будет производиться до 4 байт).

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

Например, для предыдущего примера, занесём в элементы структуры следующие значения:

a=6; // В бинарном виде 00000110

b=8; // В бинарном виде 00001000

c=10; // В бинарном виде 00001010

d=12 // В бинарном виде 00001100

Тогда в памяти значения будут храниться в следующем виде (условные обозначения: LSB – Less Significant Bit, Наименее значащий бит; MSB – Most Significant Bit, Наиболее значащий бит)

0

1

1

0

0

0

1

0

1

0

1

0

0

0

0

0

int a:3;

int b:4;

int c:5;

Биты выравнивания

↑ LSB Байт 0 MSB Байт 0 ↑ ↑ LSB Байт 1 MSB Байт 1 ↑

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Биты выравнивания

↑ LSB Байт 2 MSB Байт 2 ↑ ↑ LSB Байт 3 MSB Байт 3 ↑

0

0

1

1

0

0

0

0

char d;

↑ LSB Байт 4 MSB Байт 4 ↑

Таким образом, вся реализация структуры в памяти представляется в виде пяти байт:

0x46

0x05

0x00

0x00

0x0c

Практическое применение побитовая запись имеет при необходимости записи/чтения только нескольких бит в числе. Например, число типа char можно представить в виде следующей побитовой структуры:

struct BitChar

{

char bit0:1;

char bit1:1;

char bit2:1;

char bit3:1;

char bit4:1;

char bit5:1;

char bit6:1;

char bit7:1;

};

При такой записи, записывая или считывая значения из какого-либо поля этой структуры, программист получает возможность доступа к отдельному биту числа.