Бітові типи

У ряді задач може знадобитися робота з окремими двійковими розрядами даних. Найчастіше такі задачі виникають у системному програмуванні, коли, наприклад, окремий розряд пов'язаний зі станом окремого апаратного перемикача чи окремої шини передачі даних. Дані такого типу представляються у вигляді набору бітів, упакованих у байти чи слова, і не пов'язаних один з одним. Операції над такими даними забезпечують доступ до обраного біта даних. У мові PASCAL роль бітових типів виконують беззнакові цілі типи byte та word. Над цими типами крім операцій, характерних для числових типів, допускаються і побітові операції. Аналогічним чином роль бітових типів відіграють беззнакові цілі в мові C. У мові PL/1 існує спеціальний тип даних – рядок бітів, що повідомляється в програмі, як: BІТ(n). Дані цього типу представляють собою послідовність бітів довжиною n. Рядок бітів займає ціле число байтів у пам'яті та при необхідності доповнюється праворуч нулями.

Операції над бітовими типами. Над бітовими типами можливі три групи специфічних операцій: операції булевої алгебри, операції зсуву, операції порівняння.

Операції булевої алгебри:

– заперечення - НI (not),

– логічне додавання чи диз’юнкція - АБО (or),

– логічне множення чи кон’юнкція - ТА (and),

– виключне АБО (xor).

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

Нижче наведені приклади виконання побітових логічних операцій:

а) x = 01101100 в) x = 01101100

not x = 10010011 y = 11001110

x and y = 01001100

б) x = 01101100 г) x = 01101100

y = 11001110 y = 11001110

x or y = 11101110 x xor y = 10100010

У деяких мовах (PASCAL) побітові логічні операції позначаються так само, як і операції над логічними операндами та розпізнаються за типом операндів. В інших мовах (C) для побітових і загальних логічних операцій використовуються різні позначення. Ще в інших (PL/1) – побітові операції реалізуються вбудованими функціями мови.

Операції зсувів виконують зсув двійкового коду на задану кількість розрядів вліво чи вправо. З трьох можливих типів зсуву (арифметичний, логічний, циклічний) у мовах програмування звичайно реалізується тільки логічний (наприклад, операції shr, shlу PASCAL).

В операціях порівняння бітові дані інтерпретуються як цілі без знака, і порівняння виконується як порівняння цілих чисел. Бітові рядки в мові PL/1 – більш загальний тип даних, до якого застосовні також операції над рядковими даними, що розглянуті в главі 4.