Результати бітових операцій
Будь-які дані, записані в пам'ять ЕОМ, як відомо, є послідовністю біт, тобто послідовність нулів і одиниць. Наприклад, будь-яке число типу int буде займати 2 байта в пам'яті, тобто 16 біт. Його можна розглядати двояко: або як ціле число (так і робиться при виконанні операцій *, /, +, -.%), Або як послідовність біт, що можливо при використанні бітових операцій.
Бітові операції виконуються незалежно над кожним бітом даних. Якщо операція двомісна, то вона виконується над відповідними бітами операндів.
У Сі є наступні бітові операції:
бітове заперечення (одномісна),
побітовое "і" (двомісна),
^ Побітовое "виключають або" (двомісна),
| побітовое "або" (двомісна).
Результат цих операцій визначає таблиця значень для всіляких комбінацій біт двох операндів.
Перший приклад показує, як за допомогою операції | можна встановити в одиницю вибрані біти операнда:
char a, b; / * 00011010 = 26 * /
b = a | 26 / * b = 31 * / / * b = 00011011 = 31 * /
Наступний приклад показує, як за допомогою операції можна обнулити старшу частину байта:
char a, b; / * A = 00101101 = 45 * /
a = 45; / * 00001111 * /
/ * B = 00001101 = 13 * /
До бітових операцій відносяться операції зсуву <<и>>:
a <
a >> b зрушення бітів змінної a вправо на b позицій.
a = 26; / * A = 00011010 = 26 * /
b = a <<2; /* b = 01101000 = 104 */
Зрушення вліво рівносильний множенню на 2 у відповідній мірі. Зрушення вправо - поділу на 2 у відповідній мірі.
Всі бітові операції виконуються зліва направо. У наступному рядку наведені бітові операції в порядку зменшення їх пріоритету.
Для двомісних бітових операцій визначені додаткові операції присвоювання:
a <<= b; эквивалентно a = a <
a >> = b; еквівалентно a = a >> b,
a = B; еквівалентно a = a b,
a ^ = b; еквівалентно a = a ^ b,
a | = b; еквівалентно a = a | b.
Являють собою двомісні операції, призначені для порівняння операндів. У мові Сі є шість операцій відносини:
> = Більше або дорівнює,
<= меньше или равно,
Дія операцій відносини полягає в порівнянні першого і другого операнда. Якщо операнди не задовольняють умові відносини, то результат операції дорівнює нулю, тобто умова помилкова. Якщо операнди задовольняють умові відносини, то результат відношення не дорівнює нулю, тобто умова істинно.
b = (a + 5 <= 4 ); /* b = 0 */
Зі сказаного вище випливає, що в мові програмування С відсутній спеціальний логічний тип даних. Його замінює цілий тип, причому логічного поняття "помилково" відповідає значення 0, а логічного поняття "істина" - будь-яке відмінне від 0 ціле число.
Операції відносини виконуються зліва направо. При нечіткому розумінні їх дії можливе отримання, взагалі кажучи, невірного результату. Наприклад, з точки зору синтаксису мови Сі вираз a Щоб цей вислів відповідало математичного змістом, його потрібно розбити на дві частини a Схожі статті