Структуры с битовыми полями

Язык Си допускает использование в структурах особого типа полей – битовых. Их использование дает возможность доступа к отдельным битам более крупных объектов (байтов, слов). Битовое поле (или поле битов) может быть объявлено только как компонент структуры по форме:

тип имя: ширина; где

тип – спецификатор целого типа (int – знаковый, unsigned –б еззнаковый);

имя – название поля, которое может быть опущено;

ширина – размер поля в битах.

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

Битовые поля в структуре описываются от младших разрядов к старшим. В знаковых полях типа int старший бит используется для хранения знака. Например, такое поле шириной 1 бит может содержать только значения 0 и –1, так как любая ненулевая величина будет интерпретироваться как –1.

Пример. Рассмотрим работу программы по обработке битовых полей структуры my_struct, описывающей машинное слово из двух байтов.

Программа:

#include<stdio.h>

#include<conio.h>

void main()

{ struct example { /* описание структуры с битовыми полями */

int i: 2; /* младшие разряды слова */

unsigned j: 2; /* беззнаковое поле */

int: 2; /* неименованное поле */

int k: 2; /* знаковое поле */

int dummy: 8; /* старшие разряды слова */

} my_struct; /* структурная переменная */

clrscr(); /* очистка экрана */

my_struct.dummy = 0; /* заполнение полей структуры */

my_struct.i = 1;

my_struct.j = 3;

my_struct.k = -1;

printf(“Значение структурной переменной (16-чное) = %x\n”,
my_struct);

printf(“Отдельные поля: i=%d j=%d k=%d\n”,

my_struct.i, my_struct.j, my_struct.k);

}

Результаты программы:

Значение структурной переменной (16-чное) = ed

Отдельные поля: i=1 j=3 k=-1

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

Схема структурной переменной my_struct:

Биты: 15…8 7 6 5 4 3 2 1 0
Значения: 0…0 1 1   1 1 0 1
Имя поля: dummy k   j i

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: