Час/числа
Побітові операції
AND/OR/XOR/NAND/NOR/XNOR/NOT і зсуви над цілими числами заданої розрядності (8/16/32/64 біт) у будь-якій системі числення.
(кількість бітів зсуву, десяткове число)
Побітові операції працюють безпосередньо з окремими бітами числа, а не з його значенням цілком, — це основа прапорців дозволів, мережевих протоколів і низькорівневої оптимізації.
Як користуватися
- Введіть одне чи два числа в будь-якій системі числення (двійковій, шістнадцятковій, десятковій) і оберіть операцію (AND, OR, XOR, NAND, NOR, XNOR, NOT чи зсув).
- Оберіть розрядність (8/16/32/64 біт) — це впливає на поведінку NOT і зсувів на межах числа.
- Результат показується одразу в кількох системах числення для зручного порівняння.
Типові сценарії
- Робота з прапорцями дозволів чи налаштувань, упакованими в одне число (наприклад, права доступу файлової системи).
- Налагодження мережевого протоколу чи бінарного формату, де поля упаковані на рівні окремих бітів.
- Навчальний приклад для розуміння двійкового представлення чисел і операцій над ним.
Що варто памʼятати
Результат NOT і зсувів залежить від обраної розрядності — те саме число дає різний результат при 8-бітній і 32-бітній розрядності через різну кількість бітів.
XOR часто використовують для перемикання прапорця (toggle) — застосування XOR двічі з тим самим значенням повертає оригінал.
Стаття про цей інструмент: Побітові операції: як AND, OR і XOR працюють на рівні бітів
Часті запитання
Чим відрізняються AND, OR, XOR, NAND, NOR, XNOR і NOT?
AND дає 1 лише коли обидва біти 1, OR — коли хоч один 1, XOR — коли біти різні. NAND/NOR/XNOR — їхні заперечення, а NOT інвертує кожен біт одного операнда.
Як враховується розрядність і знак числа?
Оберіть розрядність 8/16/32/64 біт — саме в її межах виконуються операції та зсуви. Від’ємні числа представлені у доповняльному коді (two’s complement), тому результат NOT чи зсуву для них може виглядати неочікувано, якщо звикли до десяткового запису.
У чому різниця між лівим і правим зсувом?
Зсув ліворуч (<<) додає нулі справа, фактично множачи на 2 в степені зсуву. Зсув праворуч буває логічним (додає нулі зліва) або арифметичним (зберігає знаковий біт) — тип залежить від обраного режиму.
Чому вираз "if (a & b == c)" часто працює не так, як очікувалося?
У більшості мов оператор порівняння == має вищий пріоритет за побітовий &, тому вираз обчислюється як "a & (b == c)", а не так, як зазвичай очікує автор. Щоб уникнути цієї пастки, завжди обгортайте побітові операції в явні дужки.
Навіщо взагалі використовувати побітові прапорці замість окремих булевих змінних?
Набір прапорців в одному числі компактніше зберігається й передається (наприклад, у мережевих протоколах чи файлових форматах), а перевірка чи зміна конкретного прапорця через AND/OR/XOR виконується за одну швидку операцію.