Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Массивы структур. Битовые поля




Массивы структур

Структурный тип может быть использован для декларации массивов, элементами которых являются структурные переменные, например:

struct person spisok[100]; - spisok - массив структур;

или struct person {

char fio[40];

int day, month, year;

} spisok[100];

В данном случае обращение к полю, например, day i -й записи может быть выполнено одним из следующих способов: spisok[i]. day, *(spisok+i). day, (spisok+i) -> day.

Битовые поля

Структура может содержать любые комбинации битовых полей с данными других типов. Целочисленные элементы типа signed или unsigned можно объявить битовыми полями шириной от 1 до 16 бит. Ширина битового поля и его необязательный идентификатор задаются следующим образом:

спецификатор_типа <идентификатор_битового_поля>:длина; где "спецификатор_типа" - это char, unsigned char, int или unsigned int. Битовые поля располагаются с нижнего и кончая старшим битом слова. Выражение "длина" должно быть задано и должно задавать целочисленную константу со значением в диапазоне от 0 до 16.

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

struct mystruct {

int i:2;

unsigned j:5;

int:4;

int k:1;

unsigned m:4;

} a, b, c;

 

Целочисленные поля хранятся в виде дополнения до двух, причем крайний левый бит побещается в наиболее значащий бит. Для битового поля типа int (например, signed) наиболее значащий бит интерпретируется как знаковый бит. Битовое поле шириной 2, содержащее двоичное 11, будет, следовательно, в случае типа

unsigned интерпретироваться как 3, а в случае int как -1. В предыдущем примере допустимое выражение a.i = 6 поместит в a.i двоичное значение 10 = -2, не выдавая каких-либо предупреждений. Поле k типа signed int шириной 1 может содержать только значения -1 и 0, так как битовый шаблон 1 будет интерпретирован как -1.

Примечание: Битовые поля могут объявляться только в структурах, объединениях и классах. Доступ к ним

 

выполняется теми же селекторами элементов (операциями. и ->), что используются для доступа к

элементам других типов. Кроме того, битовые поля вызывают некоторые проблемы с созданием переносимых кодов, поскольку организация бит в байтах и байт в словах зависит от конкретной машины.

Выражение &mystruct.x недопустимо, так как x - это идентификатор битового поля, а никакой гарантии, что mystruct.x имеет адрес на границе байта, нет.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных