порозрядні операції

Лекція 8. порозрядному операції

Інформація в комп'ютері представляється в двійковій системі (наявність і відсутність напруги). Мінімальною одиницею інформації є біт - нуль або одиниця, брехня або істина, «ні» або «так». Кожен байт складається з 8 біт. Якщо число знакове (signed), то самий лівий його біт позначає знак числа - 0 для позитивних чисел і 1 для негативних чисел, інші біти формують модуль числа (це відноситься тільки до цілих чисел, речові числа завжди зі знаком). Якщо число беззнаковое (unsigned), то все біти беруть участь у формуванні значення, але число може бути тільки позитивним.

Позитивні цілі числа в комп'ютері представляються в нормальному коді - це звичайне уявлення числа в двійковій системі, а негативні - в додатковому коді. Для отримання додаткового коду береться двійкове подання рівного по модулю цілого числа, потім все цифри двійкового представлення інвертуються (0 переходить в 1, 1 - в 0), при цьому виходить так званий зворотний код, до якого додається 1 для отримання додаткового коду. Наприклад, нормальний код числа 207 при використанні 2 байт - 0000000011001111, а додатковий код числа -207 - 1111111100110001 (кількість цифр в числі суттєво!). Якщо скласти два ці числа, виходить 0 (з перенесенням 1 за старший розряд числа). При додаванні різних по модулю позитивного і негативного чисел виходить число в нормальному коді, якщо результат більше 0, і число в додатковому коді, якщо результат менше 0.

Існують операції, які працюють з бітами - можна взяти заперечення, застосувати операції «І» або «АБО». Порозрядні операції застосовуються до перерахувань і інтегральним типами - bool. char. short. int і long (можливо, з модифікатором unsigned). Однак не можна застосувати ці операції до одного біту, а можна лише застосувати одну і ту ж операцію до всіх бітів змінної.

«І» , «Або» |, «виключає або» ^

int BitCount (int x)

unsigned mask = 0x80000000; for (c = 0; x! = 0; x <<= 1) if (x & mask) c++; return c;>

// mask - допоміжна змінна, за допомогою якої виділяється один біт з числа за рахунок того, // що все біти, крім самого лівого, після застосування операції дорівнюватимуть 0, // а самий лівий біт залишиться без змін. // Змінна инициализируется шестнадцатеричной константою 0x80000000, // в якій всі біти, крім самого лівого, рівні 0.

Приклад 2. Функція, що встановлює заданий біт в 0

int ClearBit (int x, int pos)

(mask <

Приклад 3. Функція, що встановлює заданий біт в 1

Приклад 4. Використання порозрядних операцій для роботи з атрибутами

r;> void main ()