Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консп_лекцій_Частина_1. Основи представлення с.doc
Скачиваний:
9
Добавлен:
06.11.2018
Размер:
839.68 Кб
Скачать

5.6. Бітові поля

Елементом структури може бути бітове поле, що забезпечує доступ до окремих бітів пам'яті. Поза структурами бітові поля використовувати не можна.

Бітові поля - це особливий вид полів структури. Вони використовуються для щільного упакування даних, наприклад, прапорців типу "так/ні". Найменьша по довжині комірка пам'яті, яку можна адресувати - 1 байт, а для збереження прапорця досить одного біта.

При описі бітового поля після імені через двокрапку вказується довжина поля в бітах, що задається цілим виразом або константою. Поле нульової довжини означає вирівнювання на границю наступного слова.

Допускаються неіменовані поля бітів. Вони не впливають на зміст іменованих полів, але певним чином можуть поліпшувати розміщення полів в пам'яті.

Структури бітових полів можуть містити і знакові елементи. Але, навіть цілі поля можуть розглядатись як беззнакові. Тому рекомендується описувати бітові поля як unsіgned.

В пам'яті бітові поля розміщуються на відповідних границях слів, при цьому деякі біти слів можуть залишатись невикористаними. Поле, яке не можна розмістити у місце, що залишилося до границі слова, розміщується в наступне слово. Поле не може бути ширшим за слово. На деяких машинах бітові поля розміщуються справа наліво, а на деяких – зліва направо.

Приклад 11.

struct {

unsigned t : 1;

unsigned p : 3;

unsigned : 1; // не використовується

unsigned m : 4;

unsigned : 0; // вирівнювання на границю наступного слова

unsigned a : 1;

} rec = {1,3,8,1};

Приймемо, що бітові поля розміщуються справа наліво. В пам'яті бітові поля структури rec розміщуються за такою схемою:

0

0

0

0

0

1

1

1

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

m

-

p

t

вирівнювання

m

на границю

наступного слова

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

вирівнювання

a

на

границю

слова

Отже, структура rec в пам’яті комп’ютера зберігається у 8 байтах в такому вигляді:

07 01 00 00 01 00 00 00

Однак застосування полів для зберігання декількох змінних в одному байті не обов'язково економить простір. Воно економить простір, який займають дані, але розмір коду, необхідного для роботи з цими змінними, на більшості машин зростає. Відомі програми, які значно стискались, коли двійкові змінні перетворювали з полів біт у символи. Крім того, доступ до char або іnt зазвичай набагато швидший, ніж доступ до бітових полів. Поля - це просто зручний і короткий запис для застосування логічних операцій з метою отримання інформації із частини слова або введення інформації в неї.