Царица наук EN

Решатель

Перевод чисел из одной системы счисления в другую

Двоичная, восьмеричная, шестнадцатеричная и любая другая система до 36-й, дробные числа и римские цифры — с решением по шагам и проверкой.

Загружаем решатель…

Как записать задачу

Число, его основание и куда переводить: 1011_2 в 10, FF_16 в 2, 255 в 16. Основание пишут после числа — через подчёркивание (1010_2), в скобках (1010(2)) или нижним индексом (1010₂); понимаются и программистские приставки 0x, 0b, 0o. Число без основания считается десятичным. Систему можно назвать словом: «в двоичную», «в шестнадцатеричную», «в 16-ричную». Если не сказать, куда переводить, десятичное число будет переведено в двоичную, восьмеричную и шестнадцатеричную системы сразу, а недесятичное — в десятичную.

Дробные числа тоже можно (0,1 в 2, 1A,8_16), в том числе периодические (0,(3) в 3). Цифры больше девяти записывают латинскими буквами: A = 10, B = 11, …, Z = 35, так что основание может быть от 2 до 36. Отдельно решатель переводит в римские цифры и обратно: 2024 в римскую, MCMLXXXIV.

Что значит запись числа

В записи $2024$ двойка слева означает две тысячи, а двойка в разряде десятков — двадцать: вклад цифры зависит от места. Такую запись называют позиционной, и основание — это число, во сколько раз соседние разряды отличаются друг от друга. В десятичной системе разряды — это единицы, десятки, сотни; в двоичной — единицы, двойки, четвёрки, восьмёрки.

Цифры — целые числа от $0$ до $b - 1$. Цифры «$b$» в системе с основанием $b$ нет: столько единиц одного разряда уже составляют единицу следующего. Основание системы. Номер разряда, считая справа от нуля. Цифры после запятой стоят в разрядах с номерами $-1, -2, \ldots$ и весят $\frac{1}{b}, \frac{1}{b^2}, \ldots$ Пример: $1011011_2 = 64 + 16 + 8 + 2 + 1 = 91$, а $\mathrm{FF}_{16} = 15 \cdot 16 + 15 = 255$.

Эта формула — и есть способ перевести число в десятичную систему: выписать вклады всех цифр и сложить. Для длинных чисел удобнее схема Горнера: идём по цифрам слева направо, умножаем накопленное на основание и прибавляем следующую цифру. Для $1011011_2$: $1 \to 2 \to 5 \to 11 \to 22 \to 45 \to 91$. Большие степени считать не приходится.

Из десятичной — делением

Переводить из десятичной системы удобно наоборот, делением. Разделим $n$ на основание $b$ с остатком: $n = b \cdot q + r$. По формуле выше все разряды, кроме последнего, делятся на $b$, поэтому остаток $r$ — и есть последняя цифра, а в частном $q$ записаны все остальные цифры. Делим частное снова, получаем предпоследнюю цифру, и так до нуля. Остатки, прочитанные снизу вверх, — запись числа.

С дробной частью всё зеркально. Умножим её на $b$: целая часть результата — первая цифра после запятой, а дробную часть снова умножаем на $b$. Если дробная часть стала нулём, перевод закончен. Если какая-то дробная часть повторилась, дальше цифры пойдут по кругу — получилась периодическая дробь.

Отсюда неожиданное следствие: $0{,}1$ в двоичной системе — бесконечная дробь $0{,}0(0011)_2$. Конечной дробь в системе с основанием $b$ бывает только тогда, когда знаменатель её несократимой записи раскладывается на простые множители основания, а у $\frac{1}{10}$ в знаменателе есть пятёрка. Поэтому компьютер хранит $0{,}1$ приближённо, и в большинстве языков программирования $0{,}1 + 0{,}2$ оказывается чуть больше $0{,}3$.

Между 2, 8 и 16 — группами цифр

Восемь — это $2^3$, шестнадцать — $2^4$. Поэтому одна восьмеричная цифра — ровно три двоичных разряда, а шестнадцатеричная — ровно четыре. Чтобы перевести двоичное число в восьмеричную систему, его разбивают на тройки цифр, начиная от запятой, и каждую тройку заменяют цифрой; в шестнадцатеричную — на четвёрки. Обратно — каждую цифру расписывают тремя или четырьмя битами. Никаких делений. Поэтому программисты и любят шестнадцатеричную запись: байт — это ровно две шестнадцатеричные цифры, от $00$ до $\mathrm{FF}$, а цвет #FF8800 читается как три байта: красный $255$, зелёный $136$, синий $0$.

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

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

Пример 1. 255 в двоичную систему

Делим на $2$ и записываем остатки:

$$\begin{array}{r|r|c} n & n : 2 & \text{остаток} \\ \hline 255 & 127 & 1 \\ 127 & 63 & 1 \\ 63 & 31 & 1 \\ 31 & 15 & 1 \\ 15 & 7 & 1 \\ 7 & 3 & 1 \\ 3 & 1 & 1 \\ 1 & 0 & 1 \end{array}$$

Остатки снизу вверх: $255 = 11111111_2$. Это самое большое число, которое помещается в восемь двоичных разрядов: $2^8 - 1$. В шестнадцатеричной системе то же число — $\mathrm{FF}$, в восьмеричной — $377$.

Пример 2. 123 в пятеричную систему

$123 = 5 \cdot 24 + 3$, $24 = 5 \cdot 4 + 4$, $4 = 5 \cdot 0 + 4$. Остатки снизу вверх: $123 = 443_5$.

Проверяем обратным переводом, это занимает полминуты и ловит почти все ошибки: $4 \cdot 25 + 4 \cdot 5 + 3 = 100 + 20 + 3 = 123$. Решатель делает такую проверку для каждого ответа. Ещё одна быстрая прикидка — число цифр: $5^2 = 25 \le 123 < 125 = 5^3$, значит, в пятеричной записи ровно три цифры.

Пример 3. $1011011_2$ в шестнадцатеричную

Разбиваем справа на четвёрки и дополняем левую группу нулём: $0101\ 1011$. Первая группа — $5$, вторая — $8 + 2 + 1 = 11 = \mathrm{B}$. Ответ: $1011011_2 = \mathrm{5B}_{16}$. Проверка: $5 \cdot 16 + 11 = 91$, и $1011011_2 = 91$.

Пример 4. $10{,}625$ в двоичную

Целая часть: $10 = 1010_2$. Дробную часть умножаем на $2$ и забираем целые части:

$$0{,}625 \cdot 2 = 1{,}25 \to 1,\qquad 0{,}25 \cdot 2 = 0{,}5 \to 0,\qquad 0{,}5 \cdot 2 = 1 \to 1.$$

Дробная часть кончилась, ответ конечный: $10{,}625 = 1010{,}101_2$. Так и должно быть: $0{,}625 = \frac58$, а в знаменателе только двойки.

Пример 5. 2024 римскими цифрами

Римская запись не позиционная, но пишется тоже по разрядам: $2000 = \mathrm{MM}$, $20 = \mathrm{XX}$, $4 = \mathrm{IV}$. Вместе — $\mathrm{MMXXIV}$. Знак подряд пишут не больше трёх раз, поэтому $4$, $9$, $40$, $90$, $400$ и $900$ записывают вычитанием: меньший знак ставят перед большим. Вычитать можно только I, X и C, и только из двух ближайших больших знаков: $99 = \mathrm{XCIX}$, а не $\mathrm{IC}$. Самое большое число, которое так записывается, — $3999 = \mathrm{MMMCMXCIX}$.

Типичные ошибки

  • Читают остатки сверху вниз. Первый остаток — последняя цифра числа. Читать нужно снизу вверх.
  • Забывают нулевые разряды. В $1011011_2$ две нулевые цифры; при переводе в десятичную их вклад ноль, но место в записи они занимают. Выбросив их, получите другое число.
  • Пишут цифру, которой в системе нет. В восьмеричной системе нет цифр $8$ и $9$, в двоичной — ничего, кроме $0$ и $1$. Запись $129_8$ — ошибка.
  • Путают буквы с цифрами. $\mathrm{A}_{16}$ — это $10$, а не $1$; $\mathrm{1A}_{16} = 26$.
  • Группируют биты не от запятой. Тройки и четвёрки отсчитывают от запятой: в целой части — влево, в дробной — вправо, дополняя нулями неполные группы с краёв.
  • В дробной части делят вместо того, чтобы умножать. Делением переводят целую часть, умножением — дробную.

Что ещё посмотреть

История записи чисел — от зарубок на кости до двоичной системы Лейбница (1703) и компьютеров — в главе «Счёт: от зарубок до битов». Почему периодическая дробь повторяется и как перевести её в обыкновенную — в калькуляторе дробей. Остатки от деления, на которых держится перевод, подробно разобраны в решателе сравнений по модулю, а разложить основание или знаменатель на простые множители поможет решатель разложения.

Где это объясняется

Другие решатели

Главы курса