Двоичный калькулятор
Введите два двоичных числа и получите сумму, разность, произведение или частное — с переносами, заёмами, частичными произведениями и шагами деления в столбик, расписанными по колонкам. Переключитесь в побитовый режим, чтобы применить AND, OR, XOR, NOT, сдвиги и циклические сдвиги при 4–128 битах. Бесплатно, без регистрации, и ничего не покидает ваш браузер.
Только двоичные цифры, с необязательным минусом в начале. Пробелы и знаки подчёркивания игнорируются, поэтому 1011 0110 тоже работает.
Результат
1 0010
Двоичный
18
Десятичный
12
Шестнадцатеричный
22
Восьмеричный
5 бит
Длина
Ход вычислений
| Строка | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|
| Перенос на входе | 1 | 1 | 0 | 1 | 0 |
| A | 0 | 1 | 1 | 0 | 1 |
| B | 0 | 0 | 1 | 0 | 1 |
| Сумма | 1 | 0 | 0 | 1 | 0 |
Как пользоваться двоичным калькулятором
- 1. Выберите вид операции. Арифметика складывает, вычитает, умножает или делит. Побитовый режим работает с отдельными битами шаблонов фиксированной длины.
- 2. Введите числа. Используйте только 0 и 1. Можно ставить минус в начале, префикс
0b, пробелы и знаки подчёркивания — так что1011 0110читается как одно число. - 3. Выберите разрядность (только для побитового режима). NOT, сдвиги и циклические сдвиги без разрядности не имеют смысла, поэтому калькулятор её запрашивает: 4, 8, 16, 32, 64 или 128 бит.
- 4. Читайте результат и ход вычислений. Ответ выводится в двоичном, десятичном, шестнадцатеричном и восьмеричном виде, а ход вычислений — в столбик под ним.
Как работает двоичное сложение
Двоичное сложение следует тем же правилам столбцов, что и десятичное, но столбец переполняется на 2, а не на 10. Сложите два бита в столбце и перенос, пришедший справа. Если сумма 0 или 1, запишите её. Если 2 или 3, запишите младший бит (0 или 1) и перенесите 1 в следующий столбец слева.
| Сумма столбца | Записанный бит | Перенос |
|---|---|---|
| 0 + 0 + 0 = 0 | 0 | 0 |
| 1 + 0 + 0 = 1 | 1 | 0 |
| 1 + 1 + 0 = 10 (2) | 0 | 1 |
| 1 + 1 + 1 = 11 (3) | 1 | 1 |
Возьмём 1101 (13) и 101 (5). Калькулятор дополняет оба числа до пяти столбцов и показывает перенос, приходящий в каждый из них, — 11010 слева направо, — что даёт 10010, то есть 18. Строка переносов — та часть, которую люди теряют при сложении вручную.
Вычитание, умножение и деление
Вычитание работает наоборот: когда в столбце нужно 1 − 1 − 1 или 0 − 1, он занимает 1 из столбца слева, который здесь равен 2. 1000 − 0011 показывает заём, проходящий через три столбца, и даёт 0101 (8 − 3 = 5). Если A меньше B, калькулятор вычитает меньшее из большего и ставит результату знак минус.
Умножение — это сдвиг и сложение. Каждая единица в множителе даёт копию множимого, сдвинутого влево на позицию этого бита, а ноль ничего не даёт. Для 1011 × 101 (11 × 5) единицы стоят на позициях 0 и 2, поэтому частичные произведения — 1011 и 101100, а их сумма — 110111, то есть 55.
Деление — это деление в столбик с очень простым шагом угадывания. Сносите по одному биту делимого: если делитель помещается в то, что у вас есть, вычтите его и запишите 1 в частное, иначе запишите 0. 1100100 ÷ 111 (100 ÷ 7) даёт частное 1110 (14) и остаток 10 (2). Для отрицательных операндов частное усекается к нулю, а остаток принимает знак A — как в C, Java и JavaScript.
Побитовые операции при выбранной разрядности
| A | B | AND | OR | XOR | NAND | NOR | XNOR |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
При 1100 и 1010 в 4 битах AND даёт 1000, OR даёт 1110, а XOR даёт 0110. NOT переворачивает каждый бит в пределах разрядности, поэтому тот же 1100 становится 0011 в 4 битах, но 11110011 в 8 битах — именно поэтому разрядность важна.
Левый сдвиг на n сдвигает каждый бит на n позиций вверх и заполняет освободившиеся места нулями; биты, выходящие за верхний край, теряются, и калькулятор их перечисляет. Логический правый сдвиг заполняет освободившиеся места нулями. Арифметический правый сдвиг копирует старший бит, поэтому отрицательное число остаётся отрицательным: 10110110, сдвинутое вправо на 2, даёт 00101101 логически, но 11101101 (−19) арифметически. Циклические сдвиги возвращают выпавшие с одного конца биты на другой конец, поэтому ничего не теряется.
В арифметическом режиме нет переполнения
Арифметика здесь точна при любой длине, поэтому 11111111 + 1 — это 100000000, а не 0. Реальное оборудование хранит фиксированное число битов и переполняется. Чтобы увидеть такое поведение и диапазоны знаковых чисел, которые с ним связаны, используйте калькулятор дополнения до двух.
Частые ошибки
- Забыть перенос в самый левый столбец. Сложение двух 8-битных чисел может дать 9-битный ответ. Калькулятор сохраняет лишний столбец.
- Путать логический и арифметический правый сдвиг. Они совпадают для положительных чисел и расходятся для любого шаблона со старшим битом 1. Языки различаются: в Java
>>арифметический, а>>>логический; в C поведение>>для отрицательного знакового значения зависит от компилятора (в распространённых — арифметическое). - Случайно читать шаблон бит как знаковое число.
11110011— это 243 без знака и −13 в дополнительном коде. Результаты побитовых операций показывают оба значения, чтобы вы могли понять, какое имеете в виду. - Считать, что NOT не зависит от разрядности. В неограниченном целом NOT от 12 равен −13. В фиксированной разрядности это дополняющий шаблон, который и возвращает калькулятор.
Часто задаваемые вопросы
- Как складывать двоичные числа?
- Работайте от самого правого столбца влево, складывая два бита и перенос. Сумма 0 или 1 записывается как есть; сумма 2 записывается как 0 с переносом 1, а сумма 3 — как 1 с переносом 1. Например, 1101 + 101 = 10010. Калькулятор показывает перенос в каждый столбец.
- Как вычитать двоичные числа?
- Вычитайте столбец за столбцом справа. Если в столбце получилось бы меньше нуля, займите 1 из следующего столбца слева, что добавляет 2 к текущему столбцу. Если второе число больше, вычитайте в обратном порядке и поставьте минус перед ответом. 1000 − 11 = 101 (8 − 3 = 5).
- В чём разница между логическим и арифметическим правым сдвигом?
- Логический правый сдвиг заполняет освободившиеся старшие биты нулями, поэтому он трактует шаблон как беззнаковое число. Арифметический правый сдвиг копирует исходный старший бит, поэтому отрицательное число в дополнительном коде остаётся отрицательным. Оба делят значение пополам, но только арифметический сдвиг корректно обрабатывает отрицательные значения.
- Что делают AND, OR и XOR?
- Они сравнивают два шаблона бит столбец за столбцом. AND даёт 1, только когда оба бита равны 1; OR даёт 1, когда хотя бы один бит равен 1; XOR даёт 1, когда ровно один бит равен 1. AND используют, чтобы маскировать биты, OR — чтобы устанавливать биты, а XOR — чтобы инвертировать их или искать различия.
- Может ли калькулятор работать с отрицательными двоичными числами?
- В арифметическом режиме — да: поставьте минус перед числом, и правила знаков применятся к точному результату. Побитовый режим принимает обычные шаблоны бит, потому что шаблон отрицательного числа зависит от разрядности. Чтобы найти шаблон отрицательного значения, используйте калькулятор дополнения до двух.
- Насколько большое двоичное число можно ввести?
- Фиксированного предела нет, потому что арифметика использует целые числа произвольной точности. Столбцовый ход вычислений рисуется для операндов до 64 бит; дальше вы всё равно получите точный результат без таблицы шагов. Побитовые операции ограничены выбранной разрядностью — до 128 бит.