Время/числа
Побитовые операции
AND/OR/XOR/NAND/NOR/XNOR/NOT и сдвиги над целыми числами заданной разрядности (8/16/32/64 бит) в любой системе счисления.
(количество бит сдвига, десятичное число)
Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.
How to use it
- Enter one or two numbers in any base (binary, hex, decimal) and pick an operation (AND, OR, XOR, NAND, NOR, XNOR, NOT, or a shift).
- Pick a bit width (8/16/32/64 bits) — it affects how NOT and shifts behave at the number's boundaries.
- The result is shown instantly in several number bases for easy comparison.
Common uses
- Working with permission or setting flags packed into a single number (file system access rights, for example).
- Debugging a network protocol or binary format where fields are packed at the individual-bit level.
- A teaching example for understanding binary number representation and operations on it.
Things to keep in mind
The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.
XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.
Статья об этом инструменте: Побитовые операции: как 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 выполняется за одну быструю операцию.