Перейти к содержанию
Избранное

Калькулятор двоичных чисел

Обновлено:

Вычисляйте с двоичными числами: сложение, вычитание, умножение, деление с остатком, побитовые операции И, ИЛИ, XOR, НЕ, а также сдвиги влево и вправо. Введите два двоичных значения — и получите точный результат в двоичной, десятичной, шестнадцатеричной и восьмеричной системах счисления с пошаговым ходом вычислений.

Сложение, вычитание, умножение и побитовые операции над двоичными числами

Поля ввода
Только цифры 0 и 1, в начале можно поставить знак минус; пробелы внутри числа игнорируются. До 1024 цифр.
Второй операнд; для сдвигов это величина сдвига в двоичной записи.
Если включено, результат будет автоматически обновляться при изменении любого значения.

Двоичная арифметика — основные правила

Формула
\[ b_{n-1}\,b_{n-2}\,\ldots\,b_1\,b_0 \;=\; \sum_{i=0}^{n-1} b_i \cdot 2^i \]

Где:

  • \(b_i\) — отдельный бит, равный 0 или 1
  • \(i\) — позиция бита, отсчитываемая справа и начиная с нуля
  • \(2^i\) — разрядный вес (значимость) этой позиции

Двоичные числа записываются только цифрами 0 и 1, и вес каждой позиции — степень двойки. Арифметика здесь работает точно так же, как в десятичной системе, только со столбиками по основанию 2: при сложении \(0+0=0\), \(0+1=1\), а \(1+1=10_2\) (пишем 0, переносим 1); при вычитании \(1-0=1\), \(1-1=0\), а для \(0-1\) нужно занять 1 из следующего разряда (это 2), чтобы написать 1.

Побитовые операции устроены иначе: каждый бит результата зависит только от двух битов операндов в том же столбце — как если бы числа были записаны одно под другим. Сдвиг влево на \(k\) разрядов умножает число на \(2^k\) в пределах слова фиксированной ширины, а арифметический сдвиг вправо на \(k\) разрядов делит на \(2^k\), округляя в сторону \(-\infty\).

Калькулятор двоичных чисел — пример вычисления

Пример: сложим двоичные числа A = 1011 и B = 0110 (те же значения, что стоят в калькуляторе по умолчанию).

Сначала переведём оба числа в десятичную систему, используя веса разрядов \(2^3, 2^2, 2^1, 2^0\):

\[ 1011_2 = 8 + 0 + 2 + 1 = 11_{10}, \qquad 0110_2 = 0 + 4 + 2 + 0 = 6_{10} \]

Теперь складываем столбиком справа налево, перенося 1 всякий раз, когда сумма в разряде достигает 2 или больше:

\[ 1011_2 + 0110_2 = 10001_2 \]

Проверка в десятичной системе: \(11 + 6 = 17\), и действительно \(10001_2 = 16 + 1 = 17\).

Результат: 10001 в двоичной системе, 17 в десятичной, 0x11 в шестнадцатеричной и 0o21 в восьмеричной.

Как пользоваться калькулятором

  1. Выберите операцию из выпадающего списка: сложение, вычитание, умножение, деление с остатком, одну из побитовых операций (И, ИЛИ, XOR, НЕ) или битовый сдвиг (A << B, A >> B).
  2. Введите первое число (A), используя только цифры 0 и 1; для отрицательных значений поставьте минус перед числом. Пробелы внутри числа игнорируются.
  3. Так же введите второе число (B). Для операции НЕ используется только A; для сдвигов B — это величина сдвига (её тоже записывают в двоичном виде).
  4. Для операций НЕ, сдвига влево и сдвига вправо выберите разрядность (8, 16, 32 или 64 бита). Результат этих трёх операций — слово выбранной ширины в дополнительном коде.
  5. Ознакомьтесь с результатами: ответ в двоичной системе, а также его десятичное, шестнадцатеричное и восьмеричное представления. При делении дополнительно выводится остаток, а панель «Ход вычислений» показывает, как получен ответ.

Что такое двоичная арифметика

Двоичная система — родной язык цифровой техники: бит равен 0 или 1, потому что транзистор закрыт или открыт. Любое двоичное число — это последовательность битов, в которой позиция \(i\) справа имеет вес \(2^i\). Поэтому 1011 — это не «одна тысяча одиннадцать», а \(1\cdot8 + 0\cdot4 + 1\cdot2 + 1\cdot1 = 11\). Как только вы начинаете читать числа таким образом, все четыре арифметических действия выполняются привычным школьным способом — просто переносить нужно при 2, а не при 10.

Побитовые операции работают иначе: они обрабатывают каждый столбец независимо, и именно поэтому они идеальны для масок и флагов. Операция И над двумя числами оставляет только биты, установленные в обоих; ИЛИ — биты, установленные хотя бы в одном; XOR — биты, установленные ровно в одном. В таблице ниже показано правило для одного столбца:

thead>

A B A И B A ИЛИ B A XOR B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Сдвиги — это двоичный способ умножать и делить на степени двойки. Сдвиг 1011 влево на 2 разряда даёт 101100, то есть \(11 \times 4 = 44\), — при условии, что ни один бит не «выпадет» за левую границу слова. Именно поэтому разрядность так важна: в 32-битном регистре 1, сдвинутая влево на 31, ещё помещается, а после сдвига влево на 32 бит теряется, и результат превращается в 0. Этим приёмом пользуются повсюду — от масок изображений до разбиения IP-сетей на подсети, где калькулятор CIDR применяет ту же логику битовых масок к диапазонам адресов.

Если нужно перевести одно число из системы в систему, а не вычислять с двумя числами, воспользуйтесь двоичным конвертером; шестнадцатеричный конвертер делает то же самое для шестнадцатеричной записи, которую часто предпочитают программисты.

Допущения, ограничения и советы

  • До 1024 бит на входное число. Все вычисления выполняются с точной целочисленной арифметикой, поэтому даже очень длинные двоичные числа дают точный ответ — без округления и без переполнения в режимах сложения, вычитания, умножения, деления и побитовых операций.
  • НЕ и сдвиги имеют фиксированную ширину. Они вычисляются внутри слова выбранного размера — точно так же, как в регистре процессора. Шестнадцатеричные и восьмеричные результаты этих операций выводятся как беззнаковые битовые последовательности этой ширины, дополненные ведущими нулями.
  • Деление усекается к нулю и сообщает остаток, как операторы / и % в JavaScript, C и Java: A = B × Q + R, где |R| < |B|, а R имеет знак делимого A.
  • Пошаговые таблицы (строки переноса, строки заёма, столбцы побитовых операций) строятся для чисел длиной до 64 бит, а для умножения — при не более чем 24 установленных битах в B; более длинные входные данные всё равно вычисляются точно, просто без наглядной разбивки по шагам.
  • Ведущие нули не меняют значения — 0110 и 110 — это одно и то же число 6, — однако для операций НЕ и сдвигов они определяют форму слова, поэтому, если вам важно заполнение, укажите разрядность явно.
  • Отрицательные числа принимаются только в форме «знак-величина» (с минусом впереди); калькулятор преобразует их внутренне и выводит результат со знаком минус, а не в виде дополнительного кода (кроме режимов НЕ и сдвига).

Часто задаваемые вопросы

Как перевести двоичное число в десятичное вручную?

Подпишите над каждым битом степени двойки справа налево: 1, 2, 4, 8, 16 и так далее, а затем сложите степени, под которыми стоит 1. Например, \(1101_2 = 8 + 4 + 0 + 1 = 13\). Самый правый бит (позиция 0) всегда имеет вес \(2^0 = 1\), и каждый шаг влево удваивает вес.

Как пошагово перевести десятичное число в двоичное?

Последовательно делите число на 2, записывая остаток на каждом шаге, пока не получите 0. Затем прочитайте остатки снизу вверх. Для числа 13: \(13 \div 2 = 6\), остаток 1; \(6 \div 2 = 3\), остаток 0; \(3 \div 2 = 1\), остаток 1; \(1 \div 2 = 0\), остаток 1 — последовательность остатков 1101 и есть двоичная запись числа.

Почему в двоичной системе 1 + 1 равно 10?

Потому что в двоичной системе нет цифры 2. Когда сумма в разряде равна 2, в этом разряде пишут 0, а 1 переносят в следующий разряд слева — точно так же, как в десятичной системе переносят, когда разряд превышает 9. Поэтому \(1 + 1 = 10_2\), что читается как «один-ноль»: одна двойка и ноль единиц — двоичный способ записи числа два.

Чем различаются операции И, ИЛИ и XOR?

Все три сравнивают два числа разряд за разрядом. И даёт 1 только там, где у обоих операндов стоит 1, — удобно для извлечения и маскирования битов. ИЛИ даёт 1 там, где хотя бы у одного операнда стоит 1, — удобно для установки битов. XOR даёт 1 там, где ровно у одного операнда стоит 1, — удобно для переключения битов, причём XOR числа с самим собой всегда равен 0.

Зачем для операций НЕ и сдвигов выбирать разрядность?

НЕ и сдвиги меняют количество битов в результате, поэтому ответ зависит от размера «контейнера» — так же, как в регистре процессора. В 8-битном слове NOT 0000 0101 инвертирует все биты, включая ведущие нули, и даёт 1111 1010. Аналогично сдвиг влево на k разрядов умножает число на \(2^k\) только если ни один бит не выпадает за левую границу слова, — иначе значение «заворачивается».

Что происходит с отрицательными числами в двоичной системе?

Этот калькулятор принимает отрицательные числа со знаком минус впереди и вычисляет точные результаты со знаком. Однако в операциях НЕ и сдвига фиксированной ширины отрицательные числа подчиняются соглашению о дополнительном коде: \(-A\) хранится как \(2^w - A\) в w-битном слове, а NOT A равен \(-A - 1\). Именно поэтому NOT 0 при любой разрядности даёт −1.

Какие ошибки чаще всего допускают при двоичных вычислениях вручную?

Забывают перенос, когда разряд даёт 2; при вычитании занимают 10 вместо 2; ошибочно читают результат как десятичные цифры (1011 — это одиннадцать, а не одна тысяча одиннадцать). Следите и за направлением сдвига: сдвиг влево умножает на \(2^k\), а сдвиг вправо делит, отбрасывая остаток, — сдвиг 1011 (11) вправо на 1 разряд даёт 101 (5), а не 22.

Даёт ли двоичное деление дробный результат?

Нет — калькулятор выполняет целочисленное деление с остатком, как операторы / и % в JavaScript, C или Java. Частное усекается к нулю, а остаток удовлетворяет равенству A = B × Q + R и имеет знак делимого. Деление на ноль отклоняется с сообщением об ошибке, поскольку частное в этом случае не определено.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *