Перейти к основному содержанию
CalcMax

Конвертер из десятичной в двоичную

Результат

10001

Двоичное

Разрядные значения
16 + 1

Конвертер из десятичной системы в двоичную переписывает целое число из основания десять в основание два. Значение при этом не меняется, меняется только запись, а метод, который к ней приводит, — это последовательное деление. Делите число на два, запоминайте остаток, делите частное на два и продолжайте, пока частное не дойдёт до нуля. Остатки и есть двоичные цифры, но выходят они в обратном порядке: последний записанный остаток становится первой цифрой ответа. Возьмём 17: 17 ÷ 2 = 8, остаток 1, затем 8 ÷ 2 = 4, остаток 0, затем 4 ÷ 2 = 2, остаток 0, затем 2 ÷ 2 = 1, остаток 0 и наконец 1 ÷ 2 = 0, остаток 1. Читая снизу вверх, получаем остатки 1, 0, 0, 0, 1, значит число 17 записывается как 10001. Именно на этом развороте и происходит большинство ошибок, поэтому страница печатает каждое деление, а не только ответ. Разрядное значение в двоичной записи — это степень двойки, и прочитать ответ обратно как сумму таких значений и есть способ проверить работу: в числе 10001 есть 16 и 1 и больше ничего, а 16 + 1 снова даёт 17. Направление так же важно, когда число становится короче: целое, равное степени двойки, например 16, выходит как единица с нулями, а число на единицу меньше степени двойки выходит как одни единицы, поэтому 15 — это 1111, а 255 — это 11111111. Обе строки панели — машинные записи, и это стоит заметить сразу. Строка двоичного ответа и строка разрядных значений печатаются ровно теми символами, какими их считает программа: без разделителей разрядов и без какой-либо локализации. Переносить их в другое поле нужно подряд, без разделителей, потому что поля ввода в этом семействе разделителей не принимают. Ввод, наоборот, ограничен жёстче, чем кажется: это целое десятичное число не больше 9 007 199 254 740 991, то есть 16 цифр в десятичной записи и 53 в двоичной. Десятичная точка и разделители тысяч отклоняются, а не округляются: пишите 1500, а не 1 500, и не пишите 17,5 вместо 17. За этой границей машина перестаёт различать соседние целые числа, поэтому слишком большой ввод отклоняется, а не переводится во что-то, что лишь выглядит ответом.

Деление 17 на два шаг за шагом, пока частное не обратится в нуль

ШагДеление на дваЧастноеОстаток
117 ÷ 281
28 ÷ 240
34 ÷ 220
42 ÷ 210
51 ÷ 201

Здесь показан метод, а не результат, и потому таблица закреплена на числе 17, пока панель наверху переводит то, что набрали вы. Читайте столбец остатков снизу вверх, и цифры ответа появятся по порядку: 1, 0, 0, 0, 1, то есть 10001. Читать этот столбец приходится вверх потому, что каждое деление находит наименьшую значащую цифру из оставшегося: первый раунд закрепляет разряд единиц, второй — разряд двоек и так далее, поэтому раунды идут по ответу справа налево. Останавливаться на нулевом частном можно потому, что нулевое частное означает, что выше текущего разряда ничего не выставлено. Две подробности, которые стоит заметить в таблице: каждый остаток равен 0 или 1 и ничем другим быть не может, поскольку делитель равен двум; и частное каждый раунд убывает более чем вдвое, поэтому лестница даже для самого большого допустимого ввода занимает всего около пятидесяти строк. Если вы переводите другое число, ведите те же четыре столбца на бумаге: таблица говорит, каковы эти столбцы, а не каковы будут ваши числа.

Формула

17 ÷ 2 = 8, остаток 1 → 8 ÷ 2 = 4, остаток 0 → 4 ÷ 2 = 2, остаток 0 → 2 ÷ 2 = 1, остаток 0 → 1 ÷ 2 = 0, остаток 1 ⇒ 17 = 10001 = 16 + 1

17
Целое число, которое предстоит перевести, записанное по основанию десять. Оно обязано быть целым: десятичная точка или разделитель тысяч отклоняются, а не отбрасываются округлением, потому что это семейство страниц работает с целыми числами насквозь
÷ 2
Шаг, который повторяется. Двойка — то основание, в которое идёт перевод, поэтому каждый раунд спрашивает, сколько двоек помещается, а оставшаяся часть и есть ровно та цифра, которая принадлежит этой позиции
частное
Та часть, которая переходит в следующий раунд. Процесс останавливается, когда частное доходит до нуля, и это признак того, что более высокое разрядное значение уже не нужно
остаток
Цифра, которую выдал этот раунд. Деление на два может оставить после себя только 0 или 1, и потому ответ получается набором двоичных цифр, а не каким-нибудь другим набором символов
⇒ 10001
Цифры, собранные снизу вверх. Первый найденный остаток — самая правая цифра, а последний найденный — самая левая; это единственный шаг метода, который легко перепутать
16 + 1
Ответ, прочитанный обратно как двоичные разрядные значения: в числе 10001 единицы стоят только в разрядах шестнадцати и единицы, и их сумма снова даёт 17. Это та проверка, которую печатает страница, и работает она потому, что сумма разрядных значений двоичного числа и есть само число
53 бита
Какой длины может быть ответ: 53 двоичные цифры, то есть до 9 007 199 254 740 991 в десятичной записи, а это 16 цифр. За этой шириной машина не удержит соседние целые числа врозь, поэтому более крупный ввод отклоняется, а не переводится во что-то, что только выглядит правильным

Запись числа по основанию два нужна всюду, где машинную запись приходится получать вручную. Упаковать несколько небольших значений в одно целое — значит выяснить, какие биты занимает каждое значение, а начинается это с двоичной записи: канал цвета, набор флагов прав доступа, битовое поле в конфигурационном регистре. Всякий, кто читает документацию на микросхему, встречает ту же задачу с другой стороны: диапазоны и маски напечатаны там в 16-ричной или двоичной записи, а число, из которого они получились, — десятичное. В учебных заданиях направление обычно и спрашивают напрямую — переведите десятичное число в двоичное и покажите ход решения, — и напечатанная лестница делений и есть этот ход, строка на каждое деление. Тот же перевод отвечает на вопросы, которые переводом не выглядят: сколько битов нужно значению такого размера, какая степень двойки идёт сразу над ним и почему восьмибитное поле простирается от 0 до 255, а не до 256. Программисты, считающие это в уме, обычно берут не лестницу, а степени двойки: вычитают наибольшую подходящую степень и повторяют, и вывод этой страницы поддерживает и такой способ — каждое удачное вычитание оставляет единицу в этой позиции, а напечатанная рядом с ответом сумма разрядных значений есть эти единицы, сложенные обратно.

Разобранные примеры

  1. Записываем 17 в двоичной системе

    1. 17 ÷ 2 = 8, остаток 1 — записываем эту единицу
    2. 8 ÷ 2 = 4, остаток 0
    3. 4 ÷ 2 = 2, остаток 0
    4. 2 ÷ 2 = 1, остаток 0
    5. 1 ÷ 2 = 0, остаток 1 — частное дошло до нуля, значит останавливаемся
    6. Читаем остатки снизу вверх: 1, 0, 0, 0, 1, то есть 10001

    Значение по умолчанию и пример, в котором виден разворот: первый найденный остаток оказывается последней цифрой ответа. Если читать остатки в том порядке, в каком они получились, выйдет 10001 задом наперёд — здесь он читается одинаково только по случайности, поэтому правило стоит проверять на следующем примере. Проверка: 16 + 1 = 17.

  2. Записываем целый байт, 255

    1. 255 ÷ 2 = 127, остаток 1
    2. 127 ÷ 2 = 63, остаток 1 — и каждый следующий раунд тоже оставляет 1
    3. 63 → 31 → 15 → 7 → 3 → 1, каждый раз с остатком 1
    4. 1 ÷ 2 = 0, остаток 1 — всего восемь раундов
    5. Восемь остатков, равных 1, читаем снизу вверх: 11111111

    255 — наибольшее значение, которое вмещает восьмибитное поле, и вот почему: восемь двоичных цифр дают 2⁸ сочетаний, а наибольшее из них — 11111111. Другая сторона того же факта: 256 — это 100000000, то есть девять цифр, и именно это число в байт не помещается. Сумма разрядных значений здесь — вся линейка целиком, и её стоит один раз увидеть полностью.

  3. Степень двойки, 16

    1. 16 ÷ 2 = 8, остаток 0
    2. 8 ÷ 2 = 4, остаток 0
    3. 4 ÷ 2 = 2, остаток 0
    4. 2 ÷ 2 = 1, остаток 0
    5. 1 ÷ 2 = 0, остаток 1
    6. Читаем снизу вверх: единица и четыре нуля, то есть 10000

    Степень двойки даёт ровно один остаток, равный единице, и на этом останавливается, поэтому сумма разрядных значений схлопывается в одно слагаемое. Это та форма, которую стоит узнавать: любое число, являющееся степенью двойки, записывается в двоичной системе как единица с нулями, и поэтому степени двойки — естественная единица для ширины полей, размеров страниц и ёмкостей буферов.

  4. Ведущие нули значения не меняют

    1. Ведущие нули во вводе стоят впереди десятичного числа и не прибавляют ничего
    2. Перевод выполняется по числу 17, точно так же, как в первом примере
    3. Оба вывода получаются слово в слово такими же, как там

    Ведущие нули принимаются со стороны ввода, потому что десятичное число часто вставляют оттуда, где его дополнили, и они ничего не меняют: ноль сотен всё равно ноль сотен. То же верно и в обратную сторону, где значение дополняют до фиксированной ширины намеренно: 00010001 в восьмибитном поле — то же число, что 10001, и страница принимает любую из этих записей.

Ограничения

Эта страница переводит только целые числа. Десятичная точка отклоняется, а не округляется, поэтому 17,5 перевести нельзя: дробное чтение потребовало бы второго правила о том, сколько цифр показывать и как округлять последнюю, и все страницы этой группы проводят эту границу в одном и том же месте. Разделители тысяч тоже отклоняются, поэтому пишите 1500, а не 1 500: запятая в одних языках читается как десятичная точка, и угадывать между двумя чтениями хуже, чем переспросить. Ввод — не больше 9 007 199 254 740 991, то есть 53 двоичные цифры; более крупное значение машина не удержит точно, и оно отклоняется с сообщением, а не переводится во что-то, что выглядит ответом. Ведущие нули и знак минус перед числом принимаются оба. Страница печатает лестницу делений для 17 в таблице ниже, и она постоянна, а не следует за набранным числом: панель отвечает про ваше число, таблица показывает метод. Обратное направление, чтение двоичного числа обратно в десятичное, — отдельная страница, а арифметики над результатом эта страница не делает.

Частые вопросы

Как перевести десятичное число в двоичное вручную?
Делите на два, записывайте остаток, затем делите частное на два и повторяйте, пока частное не станет нулём. Для 17 это даёт остатки 1, 0, 0, 0, 1, — а поскольку каждый раунд выдаёт очередную цифру справа, читать их надо снизу вверх, чтобы получить 10001. Другой способ, который многим кажется быстрее, — вычитать наибольшую подходящую степень двойки, ставить единицу в эту позицию и повторять с остатком; цифры получаются те же, и напечатанная на этой странице сумма разрядных значений — это то, что оставляет после себя именно второй способ.
Почему остатки читаются снизу вверх?
Потому что первое деление отвечает на вопрос о самом младшем разряде, а не о самом старшем. Деление 17 на два спрашивает, сколько в нём двоек и что осталось, — и оставшееся и есть цифра единиц, потому что это та часть, из которой двойку составить не удалось. Следующий раунд задаёт тот же вопрос про двойки, и его остаток — цифра двоек. Раунды, таким образом, идут от самой правой цифры к самой левой, и чтение их в порядке записи даёт ответ перевёрнутым.
Можно ли перевести десятичное число с дробной частью?
Здесь — нет. Эта страница принимает целые числа, поэтому 17,5 отклоняется, а не округляется. Дроби в двоичной записи вполне определены — позиции справа от точки стоят половину, четверть, восьмую, — но странице, которая их принимала бы, пришлось бы решать, сколько из них оставлять и как округлять последнюю, а все страницы этой группы переводят целые числа. Так граница остаётся на одном месте по всей группе, и значение никогда не принимается одной страницей и не отклоняется другой.
Какое самое большое десятичное число здесь можно перевести?
9 007 199 254 740 991, чья двоичная запись состоит из 53 единиц, а десятичная — из 16 цифр. Предел этот выбран не страницей: на такой ширине машина перестаёт различать соседние целые числа, поэтому более длинный ответ нельзя было бы доверить, и он отклоняется с сообщением, а не переводится. Тот же потолок встречается на странице чтения как ограничение в 53 цифры, а в 16-ричной записи — как 14 цифр, потому что это один предел, записанный в трёх основаниях.
Почему страница печатает ещё и сумму разрядных значений?
Чтобы ответ можно было проверить, а не принять на веру. Двоичное число — это то, что вы просили, но отличить правильное 10001 от неправильного по его виду невозможно. Сложение разрядных значений, которые в нём есть, — здесь это 16 и 1, — возвращает число, с которого вы начали, то есть перевод, выполненный в обратную сторону. Если сумма не возвращается к вашему числу, двоичная строка неверна, и вы знаете это без второго инструмента.
Есть ли способ быстрее, чем последовательное деление?
Для чисел, которые встречаются часто, да: выучите степени двойки примерно до 1024 и вычитайте наибольшую подходящую. На 17 уходит 16, остаётся 1, и ответ 10001 получается прежде, чем вы записали хоть одно деление. Лестница лучше, когда число непривычное, потому что она не требует арифметики, в которой можно ошибиться: деление на два, повторённое много раз, механично. Оба способа приводят к одним и тем же цифрам, и ни один из них не правильнее другого.

Источники

Похожие калькуляторы