Битовые поля

Структуру можно использовать для обеспечения доступа к отдельным битам слова при помощи битовых полей.

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

Целые компоненты структуры можно объявить битовыми полями шириной от 1 до 16 битов.

Битовое поле задается следующим образом:

тип <имя поля>: ширина;

где тип - это char, unsigned char, int или unsigned int.

Если имя битового поля опущено, то число битов, заданное выражением ширина, распределяется в памяти, но поле при этом остается недоступным программе. Если при этом значение ширина равно нулю, то следующее поле будет начинаться со следующего слова памяти.

Пример:

struct str {

int i: 3;

unsigned j: 4;

int: 4

int k: 2;

} a;

Для указанных в структуре полей задается следующее распределение памяти:

15 14 12 11 10 9 8 7 6 5 4 3 2 1 0

x x x x x x x x x x x x x x x

< -- > < -------- > < -------- > < ---- >

k не испол. j i

Целые поля хранятся в виде дополнения до 2, причем крайний левый бит является старшим. Для битового поля типа int (например, signed) старший бит интерпретируется как знаковый. Например, поле k типа signed int шириной 1 может содержать только значения –1 и 0, так как битовой шаблон 1 будет интерпретироваться как -1.

Пример:

#include<stdio.h>

void main (void)

{

struct str {

int i:1;

unsigned int j:4;

int l:4;

int k:2;

} a;

a.i=1;

printf(“%d”,a.i);

}

Результат работы программы: -1.


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



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