Умение переводить числа из одной системы счисления в другую — это важный навык. Понимание того, как менять числа между системами, поможет вам решать разные задачи: от простых вычислений до сложных проектов в программировании.
В этой статье мы вместе разберем основы различных систем счисления, научимся быстро и безошибочно переводить числа между ними →
→ также воспользуемся возможностями языка программирования Python для автоматизации этого процесса.
⭐BONUS
В конце статьи ↓ подробный разбор задания №14 ЕГЭ Информатика
- ПРЯМОЕ СЛОЖЕНИЕ В СС
СС → Система Счисления
СПОСОБ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ С ПОМОЩЬЮ ОПРЕДЕЛЁННЫХ СИМВОЛОВ
▪ОСНОВНЫЕ ВИДЫ СС
Каждая система счисления имеет своё основание. Это основание определяет какие символы будут использованы для записи чисел.
- Десятичная (основание 10):
Это основная система счисления, применяемая в повседневной жизни. Каждый день мы используем цифры — от 0 до 9. Для указания номера дома или подъезда, написать дату рождения или подсчитать сумму покупок. Если необходимо число больше 9, нужно воспользоваться двухзначными числами. Например 10, что соответствует одному десятку и нулю единиц.
Алфавит: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- Двоичная (основание 2):
Компьютеры используют двоичную систему, потому что внутри машины есть только два состояния: включено (1) и выключено (0).
Алфавит: 0, 1
- Шестнадцатеричная (основание 16):
Часто используется в программировании и для представления цветов на компьютере (web - дизайн).
Алфавит: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
❗Обратите внимание на связь между алфавитом и основанием системы счисления ↓
▪СС В ИНФОРМАЦЦИОННЫХ ПРОЦЕССАХ
Двоичная (0, 1)
Компьютеры работают на основе электрических сигналов. Сигнал может быть либо включён (1), либо выключен (0).
Внутри процессора все вычисления и обработка данных выполняются через операции с двоичными числами. Процессоры используют логические схемы, такие как AND (И), OR (ИЛИ) и NOT (ОТРИЦАНИЕ), чтобы манипулировать битами.
▪ЗАЧЕМ НУЖНЫ БУКВЫ В ЗАПИСИ ЧИСЕЛ?
Рассмотрим число, записанное в тринадцатеричной СС: 34В ('В' означает число 11)
Что, если вместо (В) записать просто число 11? Тогда получится число: 34(В) → 34(11)
В таком случае число можно рассматривать как:
- 34(11) → три - четыре - один - один (или три - четыре - одиннадцать)
- 34(В) → три - четыре - одиннадцать
Латинские буквы позволяют однозначно кодировать и декодировать сообщения. Обеспечивают более компактную запись больших чисел в различных СС.
10 → 2
ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ДВОИЧНУЮ
Двоичная система счисления использует только две цифры: 0 и 1. Эта система важна в информатике, потому что компьютеры работают с двоичными числами. В двоичной системе каждая цифра имеет вес, который зависит от её позиции.
Ручной способ (без использования Python)
Чтобы перевести число из десятичной системы счисления в двоичную, нужно выполнять последовательное деление на 2 и записывать остатки.
- Возьмите число в десятичной системе и разделите его на 2. Запишите результат деления и остаток.
- Продолжайте делить результат на 2 до тех пор, пока он не станет равным 0. Каждый раз записывайте остаток от деления.
- Запишите все остатки в обратном порядке (начиная с последнего и заканчивая первым).
Пример:
Таким образом, число 13 в десятичной системе равно 1101 в двоичной системе.
Всегда необходимо придерживаться данного правила ↓
Чтобы перевести число из десятичной системы счисления в двоичную, нужно выполнять последовательное деление на 2 и записывать остатки
❗Важный момент:
Остатки от деления всегда должны быть меньше основания системы счисления. Например, вы решили перевести число 12 в двоичную. В какой-то момент у вас получился остаток 2. Это ошибка.
При переводе в двоичную СС остатки - 0 и 1. При переводе в троичную остатки - 0, 1, 2. В четверичную остатки - 0, 1, 2, 3 и так далее. Получили остаток больше основания - ищите ошибку 😉
▪ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ДВОИЧНУЮ С ПОМОЩЬЮ PYTHON
Как работает функция bin():
- Вы задаёте целое число. Это число будет преобразовано в двоичный формат.
- Python применяет функцию bin() к этому числу. Функция возвращает строку, которая начинается с префикса '0b'.
Что значит '0b' перед числом?
'0b' — префикс, который показывает, что это двоичное число, за которым следуют цифры в двоичной записи (0 или 1). Это специальная 'отметка' для самого Python. Она показывает, что следующее число нужно воспринимать как двоичное.
- 0b110 — двоичное число для Python (один - один - ноль)
- 110 — десятичное число для Python (сто десять)
📍print() — служебная команда, она используется для вывода текстовой информации на экран или в консоль. Это как сказать компьютеру: «Покажи мне этот текст»
Как убрать '0b' перед числом?
Для этого нужно использовать срезы в Python.
❗Моменты, которые стоит учитывать при переводе из 10 СС в 2 СС:
- Функция bin() возвращает результат в виде переменной типа (str). На вход функции поступает переменная типа (int), на выходе получается тип (str)
- Функция bin() работает только с целыми числами. Если вы попытаетесь передать ей строку (str) или другой тип данных, будет вызвано исключение TypeError
Пример ошибочного кода, когда в функцию bin() передаётся строка ↓
- TypeError — ошибка типа (в переводе с английского) или ошибка в типах переменных
- 'str' object cannot be interpreted as an integer — попытка использовать строку (str) в программе, где ожидается целое число (int)
[start : end : step]
КАК РАБОТАЮТ СРЕЗЫ В PYTHON?
Срезы — это удобный способ работы с последовательностями (строками) в Python. Они позволяют разбивать строки на необходимую длину и извлекать нужные символы.
Синтаксис:
ПОСЛЕДОВАТЕЛЬНОСТЬ[НАЧАЛО : КОНЕЦ : ШАГ]
- начало — индекс, с которого начинается срез (включительно)
Если не указан, по умолчанию берется 0. - конец — индекс, на котором срез заканчивается (исключительно)
Если не указан, берется длина последовательности. - шаг — интервал, с которым выбираются элементы (по умолчанию равен 1)
Примеры работы срезов в Python:
На что обратить внимание:
- Первый элемент включительно - последний элемент не включительно
- Возможность выбрать один элемент (обращение по индексу)
- Возможность выбирать элементы с шагом (s[1:6:2])
bin() - встроенная функция в Python, для перевода чисел из десятичной системы счисления в двоичную
10 → ∞
ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ЛЮБУЮ ДРУГУЮ СИСТЕМУ СЧИСЛЕНИЯ
Действия всё те же, что и с переводом в двоичную. Только теперь делить нужно не на 2, а на основание системы счисления.
Например, при переводе в двоичную СС нужно было всегда делить на 2 и выписывать остатки. Теперь при переводе из 10-ой СС в 7-ую, делить надо на число 7 и также выписывать остатки. При переводе из 10-ой в 12-ую, надо делить на 12 и выписывать остатки.
Пример с переводом числа (234) из 10-ой в 5-ую:
Для перевода числа из десятичной системы счисления в любую другую систему счисления, необходимо каждый раз делить на основание этой СС и выписывать остатки
▪ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ЛЮБУЮ ДРУГУЮ PYTHON
Рассмотрим универсальный алгоритм, который позволяет перевести число из десятичной системы счисления в любую другую.
Принцип работы алгоритма аналогичен ручному методу: многократное деление числа на основание данной системы счисления и прибавление остатков. Всё это необходимо записать с помощью инструментов Python.
Основные моменты:
- Создание переменной для результата деления (ans = '', тип str)
- Использование цикла while для многократного повторения операций деления
- % — остаток от деления в Python
- // — целочисленное деление в Python
- Использование конкатенации (склеивание) строк для записи остатков (+)
Универсальный алгоритм для перевода из десятичной системы счисления в любую другую ↓
Проверка:
25 ÷ 3 = 8 (остаток 1)
8 ÷ 3 = 2 (остаток 2)
2 ÷ 3 = 0 (остаток 2)
При переводе числа 25 из десятичной системы счисления в троичную систему счисления, получится число 221.
Объяснение основных моментов ↓
✅ Вы можете самостоятельно выбрать в какую систему счисления перевести искомое число. Для этого необходимо изменить в алгоритме число, на которое выполняется деление:
Перевод из 10 СС в 5 СС Python:
Проверка:
- 37 ÷ 5 = 7 (остаток 2)
- 7 ÷ 5 = 1 (остаток 2)
- 1 ÷ 5 = 0 (остаток 1)
Выписываем остатки снизу - вверх и получим число: 122
Отдельно стоит рассмотреть перевод из десятичной системы в восьмеричную и шестнадцатеричную. Так как Python обладает встроенными функциями для быстрого перевода ↓
10 → 8
ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ВОСЬМЕРИЧНУЮ PYTHON
Для перевода из 10 СС в 8 СС через Python необходимо воспользоваться встроенной функцией — oct()
Рассмотрим код программы на Python ↓
Проверка:
- 123 ÷ 8 = 15 (остаток 3)
- 15 ÷ 8 = 1 (остаток 7)
- 1 ÷ 8 = 0 (остаток 1)
Как и с функцией bin(), перед ответом записаны два символа. Вновь, исправим это с помощью срезов в Python ↓
10 → 16
ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ШЕСТНАДЦАТЕРИЧНУЮ PYTHON
Для перевода из 10 СС в 16 СС через Python необходимо воспользоваться встроенной функцией — hex()
Важный момент:
Алфавит 16 СС содержит латинские буквы: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Значит, при работе с 16 СС необходимо учитывать наличие латинских букв.
Проверка:
123 ÷ 16 = 7 (остаток 13) → вместо числа (13) нужно записать букву (b)
123 ÷ 16 = 7 (остаток b)
7 ÷ 16 = 0 (остаток 7)
123(10) = 7b(16)
Добавляем срез и вновь смотрим тип переменной:
Теперь рассмотрим переводы из различных систем счисления в 10 СС. Начнём, конечно же, с двоичной ↓
2 → 10
ПЕРЕВОДЫ ИЗ ДВОИЧНОЙ В ДЕСЯТИЧНУЮ
Чтобы перевести число из двоичной системы счисления в десятичную, нужно выполнить следующие шаги:
- Пронумеруйте разряды двоичного числа справа налево, начиная с нуля.
- Умножьте каждую цифру двоичного числа на 2 в степени, соответствующей её разряду.
- Сложите полученные результаты. Сумма будет являться десятичным эквивалентом двоичного числа.
Подробный алгоритм:
❗Важное правило:
▪ПЕРЕВОД ИЗ ДВОИЧНОЙ В ДЕСЯТИЧНУЮ PYTHON
Использование метода int(x, base)
Синтаксис: int(x, base)
- x — значение, которое нужно преобразовать в целое число (str)
- base — основание системы счисления (от 2 до 36)
Перевод из 2 СС в 10 СС Python:
Зачем переменной (х) менять тип с int на str?
Рассмотрим пример где в функцию int() передаётся не строка, а целое число:
Что означает данная ошибка?
- TypeError — ошибка типа (в переводе с английского) или ошибка в типах переменных
- int() can't convert — int() не может преобразовать нестроковое значение с явной базой
Данная ошибка означает, что вы пытаетесь передать функции int() не строковое значение (str). Для перевода из различных СС в 10 СС в функцию int() должна поступать именно строка.
❗Важное правило:
Для правильного перевода в 10 СС с помощью встроенной функции int(), число должно быть в виде строки (str)
Варианты оформления:
▪(2 → 36) В 10 СС PYTHON
C помощью встроенной функции int() можно переводить из 2 СС по 36 СС в 10 СС. То есть из двоичной, троичной, четверичной ... до тридцатешестиричной, в десятичную СС.
Для этого необходимо указать второй аргумент в функции int():
int(число для перевода, система счисления)
Пример перевода из 4 СС в 10 СС:
Для перевода с помощью функции int() оснований больше 10, необходимо использовать латинские буквы ('A', 'B', 'C' и так далее) ↓
Пример перевода из 13 СС в 10 СС:
Если вы не указываете параметр base, по умолчанию используется 10 (десятичная система).
Пример перевода из 6 СС в 10 СС:
∞ → 10
ПЕРЕВОД ИЗ ЛЮБОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДЕСЯТИЧНУЮ PYTHON
Рассмотрим универсальный алгоритм, который позволяет перевести число из любой системы счисления в десятичную.
Принцип работы алгоритма аналогичен ручному методу: нумерация разрядов, за которую отвечает цикл for, умножение каждой цифры на основание в степени.
Основные моменты:
- Создание переменной для записи ответа (ans = 0, тип int)
- Цикл for для прохода по разрядам числа
- ** — возведение в степень Python
- [::-1] — запись строки в обратном порядке Python (реверсирование)
- int( ) для преобразования цифры из строчного формата в числовой
Универсальный алгоритм для перевода из любой системы счисления в десятичную ↓
f - string
МОЩНЫЙ ИНСТРУМЕНТ ДЛЯ ФОРМАТИРОВАНИЯ СТРОК
f - string (форматированные строки) в Python — это удобный способ вставки переменных и выражений прямо в строку. Начиная с версии Python 3.6
Чтобы использовать f - строки, нужно перед строкой поставить букву f или F. Внутри строки вы можете использовать фигурные скобки {} для вставки значений переменных или выражений.
Перевод в 2 СС, 8 СС, 16 СС с помощью f - строк:
- f'{число для перевода : b}' — перевод в 2 СС. В фигурных скобках необходимо указать (b)
- f'{число для перевода : o}' — перевод в 8 СС. В фигурных скобках необходимо указать (o)
- f'{число для перевода : x}' — перевод в 16 СС. В фигурных скобках необходимо указать (x)
При переводе в другие СС с помощью данного инструмента, перед строкой не появляются префиксы '0b', '0o' или '0x'. Использование срезов не требуется. Вы сразу получаете готовый ответ.
❗На что обратить внимание:
Вы можете самостоятельно выбрать размер латинских букв при переводе 16 СС.
- Если указать параметр (х), то буквы будут строчные (маленькие) a, b, c, d, e, f ..
- Если указать параметр (Х), то буквы будут заглавные (большие) A, B, C, D, E, F ..
BONUS
🔥РАЗБОР ЗАДАНИЯ №14 ЕГЭ
Прямое сложение в СС
Попробуем более подробно посмотреть на условие, выделить основные моменты:
Дано число, записанное в 10 СС. Это число нужно перевести в 2 СС. Далее подсчитать количество единиц в полученном результате.
▪I способ (Универсальный, для всех типов СС)
1 шаг
Перевести число в двоичную систему счисления. Для этого воспользуемся универсальным алгоритмом (с помощью цикла While) ↓
- x — cоздаём переменную и записываем в неё исходное число (int)
- ** — оператор возведения в степень Python
- s — создаём переменную для записи ответа (s = '', str)
2 шаг
- запускаем цикл while, пока (х) больше нуля
- вычисляем остаток от деления (х) на 2 и приписываем к (s)
- каждый раз делим (х) на 2
- // — целочисленное деление Python
В задаче необходимо найти количество единиц в двоичной записи числа. На данном этапе решения нам удалось перевести число в 2 СС.
Как узнать количество единиц в записи числа?
→ С помощью Python метода count()
Метод count() в Python помогает узнать, сколько раз встречается какой-либо символ внутри строки или другого набора данных
Пояснительные примеры:
🔥Универсальный алгоритм решения заданий ЕГЭ: Прямое Сложение в СС
▪II способ (Только для перевода в 2 СС)
❗Данный способ применим только, если в задаче говорится про перевод в 2 СС: "Сколько единиц содержится в двоичной записи выражения .."
Для решения вторым способом необходимо воспользоваться встроенной функцией Python — bin()
C помощью функции bin() в Python можно сразу перевести число в двоичную систему счисления. Не используя при этом цикл while.
Код программы:
Пояснение к алгоритму:
Принцип остаётся тот же. Создаём переменную (х), записываем в неё число из условия. Далее используем встроенную функцию bin(). Эта функция переводит число из 10 СС в 2 СС. Главное, не забываем про срезы [2:], чтобы убрать префикс '0b' перед строкой.
Для особых ценителей короткой записи в Python 😉
🔥Решение в одну строку:
👏 Поздравляю! Получен верный ответ и программа работает без ошибок.
Удачи!
⚡Повторяем материал:
▪Встроенные функции для перевода в Python:
▪Основные правила перевода:
▪10 СС - УНИВЕРСАЛЬНАЯ
🔜Материалы для успешной подготовки к ЕГЭ: