Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
114-124.docx
Скачиваний:
4
Добавлен:
11.09.2019
Размер:
121.04 Кб
Скачать

Структуры и битовые поля.

В С и C++ имеется возможность доступа к отдельным разрядам (битам) в некотором более крупном типе данных, например, в байте. Это полезно, к примеру, для изменения масок, используемых для системных целей и графики. Возможность доступа к разрядам строится на основе структур С и C++.

Рассмотрим для примера информацию, необходимую для изменения регистра статуса клавиатуры компьютера. Этот регистр в компьютерах IBM содержит следующую информацию:

биты регистра

Статус клавиатуры: 76543210

Порт(417h)

где

bit 0 = RIGHT SHIFT не нажат (1)

bit 1 = LEFT SHIFT не нажат (1) и т д

bit 2 = CTRL не нажат (1)

bit 3 = ALT не нажат (1)

bit 4 = SCROLL LOCK активен (1)

bit 5 = NUM LOCK активен (1)

bit 6 = CAPS LOCK активен (1)

bit 7 = INS активен (1)

Для доступа и управления этими данными можно создать структуру следующего вида:

НАСЧЕТ СТРУКТУРЫ ТОЧНО НЕ ЗНАЮ..

struct stkeybits {

unsigned char

ucrshift: 1, /* младший разряд */

uclshift: 1,

ucctrl: 1,

ucalt: 1,

ucscroll: 1,

ucnumlock: 1,

uccaplock: 1,

ucinsert: 1; /* старший разряд */

} stkey_register;

Биты в структуре начинаются с младшего и заканчиваются старшим. Можно указывать несколько битов, задавая их количество (вместо 1). В битовых полях можно использовать только целочисленные типы.

Обращение к элементам структуры битовых полей выполняется как обычно.

Структуры. Их дальнейшее использование.

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

Эти типы имеют такие названия, как очереди, двоичные деревья, неупорядоченные массивы, рандомизированные таблицы и графы. Многие из этих типов создаются из «связанных» структур. Обычно каждая структура будет содержать один или два типа данных плюс один или два указателя на другие структуры такого же типа.Указатели служат для связи одной структуры с другой и для обеспечения пути, позволяющего вам вести поиск по всей структуре. Например, на рисунке показано двоичное дерево, в котором каждая отдельная структура (или «узел») связана с двумя, расположенными ниже.

Является ли эта разветвленная конструкция более эффективной чем массив? Рассмотрим случай дерева с 10 уровнями узлов. Если вы составите его, то найдете 1023 узла, в которых вы можете запомнить, скажем, 1023 слова. Если слова упорядочены, согласно некоторому разумному плану, вы можете начать с верхнего уровня и находить любое слово в лучшем случае за 9 перемещений, если ваш поиск идет сверху вниз с одного уровня на следующий. Если слова находятся в массиве, вам, может быть, придется перебрать все 1023 элемента, прежде чем вы найдете нужное слово.

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

Это наше последнее слово о структурах. Далее мы хотим вкратце ознакомить вас с двумя другими средствами языка Си для работы с данными: объединением и функцией typedef.

  1. Объединения: синтаксис и правила. Создание простого объединения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]