- •Конспект лекцій ( частина і ) з дисципліни
- •1. Поняття інформації та основні форми її подання
- •2. Представлення даних в пам’яті комп'ютера
- •3. Класифікація типів даних
- •4. Базові типи даних
- •4.1. Порожній тип
- •4.2. Логічний тип даних
- •4.3. Символьні типи даних
- •4.4. Цілочисельні типи даних
- •4.5. Дійсні типи даних
- •5. Похідні типи даних
- •5.1. Переліки
- •5.2. Вказівники
- •5.3. Посилання
- •5.4. Масиви
- •5.5. Структури
- •5.6. Бітові поля
- •5.7. Об'єднання
- •6. Перетворення типів
- •6.1. Неявне перетворення типів
- •6.1.1. Арифметичне перетворення типів
- •6.1.2. Перетворення типів при присвоюванні
- •6.2. Явне перетворення типів
- •6.3. Застаріла форма явного перетворення
- •Список літератури
- •1. Поняття інформації та основні форми її подання ------------------------------------------- 3
- •Основи представлення данних в пам'яті комп'ютера
- •6.050102 “Комп’ютерна інженерія
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 зазвичай набагато швидший, ніж доступ до бітових полів. Поля - це просто зручний і короткий запис для застосування логічних операцій з метою отримання інформації із частини слова або введення інформації в неї.
