Битовое поле не может выходить
Битовое поле не может выходить за границу ячейки объявленного для него типа. Например, битовое поле, объявленное с типом
unsigned
int, упаковывается либо в пространство, оставшееся в текущей ячейке
unsigned int
от размещения предыдущего битового поля, либо, если предыдущий элемент структуры не был битовым полем или памяти в текущей ячейке недостаточно, в новую ячейку
unsigned int.
В СП ТС битовое поле может иметь либо тип
unsigned
int, либо тип
signed int. Поля целого типа хранятся в дополнительном коде; крайний левый бит — знаковый. Например, битовое поле типа
signed
int размером 1 бит может только хранить значение ?1 и 0, т.к. любое ненулевое значение будет интерпретироваться как -1.
Примеры:
/*
пример 1 */
struct {
float х, у;
} complex;
/* пример 2 */
struct employee {
char name [20];
int id;
long class;
} temp;
/* пример 3 */
struct employee student, faculty, staff;
/* пример 4 */
struct sample {
char h; float *pf;
struct sample *next; )x;
/* пример 5 */
struct {
unsigned icon:
8;
unsigned color:
4;
unsigned underline: 1;
unsigned blink:
1;
} screen [25][80];
В первом примере объявляется переменная с именем complex, имеющая тип структура. Эта структура состоит из двух элементов х и у типа
float. Тип структуры не поименован, поскольку тег в объявлении отсутствует.
Во втором примере объявляется переменная с именем temp, имеющая тип структура. Структура состоит из трех элементов с именами name, id и class. Элемент с именем name — это массив из 20 элементов типа
char. Элементы с именами id и class — это простые переменные типа
int и
long
соответственно. Структурный тип поименован тегом
employee.
В третьем примере объявлены три переменные типа структура с именами student, faculty и staff.
Объявление каждой из этих структур ссылается на структурный тип
employee, определенный в предыдущем примере.
В четвертом примере объявляется переменная с именем х типа структура. Тип структуры поименован тегом
sample. Первые два элемента структуры — переменная h типа char и указатель рf
на значения типа
float. Третий элемент с именем next объявлен как указатель на структуру того же самого типа
sample.
В пятом примере объявляется двумерный массив с именем screen, элементы которого имеют структурный тип. Массив состоит из 2000 элементов. Каждый элемент — это отдельная структура, состоящая из четырех элементов — битовых полей с именами icon, color, underline и blink.
Содержание Назад Вперед