Час/числа

Побітові операції

AND/OR/XOR/NAND/NOR/XNOR/NOT і зсуви над цілими числами заданої розрядності (8/16/32/64 біт) у будь-якій системі числення.

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

Як користуватися

Типові сценарії

Що варто памʼятати

Результат 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 виконується за одну швидку операцію.

Статті: Час/числа

Unix-час: чому комп'ютери рахують час від 1970 року

Чому саме 1 січня 1970 року стало точкою відліку часу для більшості комп'ютерних систем.

Cron-вирази: як розшифрувати розклад запуску завдань

Як розшифрувати вираз на кшталт */15 * * * * і зрозуміти, коли саме запуститься завдання.

Системи числення: навіщо потрібні двійкова, вісімкова й шістнадцяткова

Чому колір #FF5733 у CSS записаний шістнадцятковими цифрами, а не десятковими.

Різниця між датами: чому підрахунок днів складніший, ніж здається

Чому наївне віднімання дат може дати неправильний результат через високосні роки.

Розрахунок віку: чому це не просте віднімання років

Чому просте віднімання років народження може дати вік на одиницю більший за реальний.

Часові пояси: чому UTC — це не те саме, що GMT

Чому UTC не змінюється двічі на рік, а час у Лондоні (GMT/BST) — змінюється.

Розрахунок тривалості: як правильно підсумовувати години, хвилини й секунди

Чому при додаванні хвилин і секунд потрібно "переносити" залишок у наступний розряд, як при десятковому додаванні.

ISO 8601 Duration: як записати тривалість у стандартному форматі

Чому запис PT1H30M означає «1 година 30 хвилин», а не «1 хвилина 30 годин».

Номер тижня: чому в різних країнах тижні рахують по-різному

Чому 1 січня іноді належить до 52-го чи 53-го тижня попереднього року за стандартом ISO 8601.

Римські цифри: як побудована система без нуля й розрядів

Чому IV означає 4, а не 6, і як правило віднімання працює в римських цифрах.

IEEE 754: чому 0.1 + 0.2 не дорівнює 0.3 у коді

Чому в майже кожній мові програмування 0.1 + 0.2 виводить 0.30000000000000004.

Число прописом: навіщо перетворювати цифри на слова

Чому в банківських документах суму пишуть і цифрами, і словами одночасно.