Бітові поля в С ++




бітові поля з ++, структури в с ++ для початківцівВ языке С++ есть возможность задавать элементам структур определённое количество памяти в битах. Наприклад, якщо необхідно створити структуру даних, що відповідає розміру регістра в будь-якому пристрої. типом елемента (його називають двійкового полем) такой структуры может быть целочисленное (найчастіше типу непідписаний) или перелічуваних (enum).

Синтаксично бітове поле в структурі визначається наступним чином:
бітові поля з ++, структури в с ++ для початківцівНаприклад:

Мы определили структуру, в которой переменные будут занимать указанное количество бит. 2 + 2 + 4 дає 8 біт (ми вирівняли до розміру байта). Если в эту структуру дописать еще непідписаний short fifth : 5; – вже буде задіяно 2 байта. Во втором байте естественно будет мусор 8 – 5 = 3 біти, які будуть незатребуваними.

В отличии от об'єднань (union) розмір бітових полів варіюється, в залежності від того, скільки біт програміст замовив. Если заказано 7 біт (скажімо дві змінні по 3 біти, і одна – 1 біт), то С ++ відведе один байт (8 біт) під ці три змінні. Якщо програміст замовить 11 біт, то С ++ відведе два байта (16 біт). Причому в другому байті будуть задіяні тільки 5 біт, а решта швидше за все будуть, як непотрібний хвіст. Поэтому при описании битовых полей следует учитывать такое “вирівнювання” до байта. Тобто,. розподіляти в ньому змінні так, чтоб каждый бит был востребован. Для выравнивания занимаемой памяти можно использовать неименованные битовые поля.

Наведемо ще один короткий приклад, в котором битовые поля отводятся под дату и время для демонстрации этой технологии.

Результат:

бітові поля з ++, структури в с ++ для початківців

Як бачите, бітові поля зберігають дату і час. Занимает эта структура 6 байт, хоча для неї вистачить і п'яти. І на те є свої причини: сам компилятор может выравнивать отводимую память до четного числа байтов. Наприклад якщо ми замовили 18 біт, компілятор відведе нам не 3 байта, а 4, враховуючи що процесор любить працювати з байтами, а не з битами. Принаймні зберігати в пам'яті або своїх регістрах процесор вважає за краще не біти, а саме байти. Згідно з його розрядності: x32 корми 4 байта, x64 вже 8 байт. Нехай навіть з цих байт робота йде тільки з одним з них, інші все одно будуть підтягуватися.

невеликий підсумок: Битовые поля в структурах зазвичай використовуються в низкоуровневом програмуванні, когда работа идет со значениями, здатними займати не байти, а окремі біти (з огляду на те, що значення невеликі).

Нові уроки з програмування:

дата
сторінка
Бітові поля в C ++
рейтинг
51зірка1зірка1зірка1зірка1зірка

залишити коментар

Код розміщуйте в тегах: <pre class="lang:C ++ декодуванням:true ">ВАШ КОД</заздалегідь>