Найти в Дзене
МОЙ РЕПЕТИТОР

Системы счисления для новичков: переводим числа с Python!

Оглавление

Умение переводить числа из одной системы счисления в другую — это важный навык. Понимание того, как менять числа между системами, поможет вам решать разные задачи: от простых вычислений до сложных проектов в программировании.

В этой статье мы вместе разберем основы различных систем счисления, научимся быстро и безошибочно переводить числа между ними →

→ также воспользуемся возможностями языка программирования 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 (ОТРИЦАНИЕ), чтобы манипулировать битами.

▪ЗАЧЕМ НУЖНЫ БУКВЫ В ЗАПИСИ ЧИСЕЛ?

-4

Рассмотрим число, записанное в тринадцатеричной СС: 34В ('В' означает число 11)

Что, если вместо (В) записать просто число 11? Тогда получится число: 34(В) 34(11)

В таком случае число можно рассматривать как:

  • 34(11) → три - четыре - один - один (или три - четыре - одиннадцать)
  • 34(В) → три - четыре - одиннадцать

Латинские буквы позволяют однозначно кодировать и декодировать сообщения. Обеспечивают более компактную запись больших чисел в различных СС.

-5

10 → 2

ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ДВОИЧНУЮ

Двоичная система счисления использует только две цифры: 0 и 1. Эта система важна в информатике, потому что компьютеры работают с двоичными числами. В двоичной системе каждая цифра имеет вес, который зависит от её позиции.

Ручной способ (без использования Python)

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

  1. Возьмите число в десятичной системе и разделите его на 2. Запишите результат деления и остаток.
  2. Продолжайте делить результат на 2 до тех пор, пока он не станет равным 0. Каждый раз записывайте остаток от деления.
  3. Запишите все остатки в обратном порядке (начиная с последнего и заканчивая первым).

Пример:

-6

Таким образом, число 13 в десятичной системе равно 1101 в двоичной системе.

Всегда необходимо придерживаться данного правила ↓

-7
Чтобы перевести число из десятичной системы счисления в двоичную, нужно выполнять последовательное деление на 2 и записывать остатки

Важный момент:

Остатки от деления всегда должны быть меньше основания системы счисления. Например, вы решили перевести число 12 в двоичную. В какой-то момент у вас получился остаток 2. Это ошибка.

При переводе в двоичную СС остатки - 0 и 1. При переводе в троичную остатки - 0, 1, 2. В четверичную остатки - 0, 1, 2, 3 и так далее. Получили остаток больше основания - ищите ошибку 😉

▪ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ДВОИЧНУЮ С ПОМОЩЬЮ PYTHON

-8

Как работает функция bin():

  1. Вы задаёте целое число. Это число будет преобразовано в двоичный формат.
  2. Python применяет функцию bin() к этому числу. Функция возвращает строку, которая начинается с префикса '0b'.
Пример перевода числа (25) из 10-ой СС в 2-ую СС с помощью функции bin().
Пример перевода числа (25) из 10-ой СС в 2-ую СС с помощью функции bin().

Что значит '0b' перед числом?

'0b' — префикс, который показывает, что это двоичное число, за которым следуют цифры в двоичной записи (0 или 1). Это специальная 'отметка' для самого Python. Она показывает, что следующее число нужно воспринимать как двоичное.

  • 0b110 — двоичное число для Python (один - один - ноль)
  • 110 — десятичное число для Python (сто десять)

📍print() — служебная команда, она используется для вывода текстовой информации на экран или в консоль. Это как сказать компьютеру: «Покажи мне этот текст»

Как убрать '0b' перед числом?

Для этого нужно использовать срезы в Python.

-10

Моменты, которые стоит учитывать при переводе из 10 СС в 2 СС:

  • Функция bin() возвращает результат в виде переменной типа (str). На вход функции поступает переменная типа (int), на выходе получается тип (str)
  • Функция bin() работает только с целыми числами. Если вы попытаетесь передать ей строку (str) или другой тип данных, будет вызвано исключение TypeError

Пример ошибочного кода, когда в функцию bin() передаётся строка ↓

-11
  • TypeError — ошибка типа (в переводе с английского) или ошибка в типах переменных
  • 'str' object cannot be interpreted as an integer — попытка использовать строку (str) в программе, где ожидается целое число (int)

[start : end : step]

КАК РАБОТАЮТ СРЕЗЫ В PYTHON?

Срезы — это удобный способ работы с последовательностями (строками) в Python. Они позволяют разбивать строки на необходимую длину и извлекать нужные символы.

Синтаксис:

-12

ПОСЛЕДОВАТЕЛЬНОСТЬ[НАЧАЛО : КОНЕЦ : ШАГ]

  • начало — индекс, с которого начинается срез (включительно)
    Если не указан, по умолчанию берется 0.
  • конец — индекс, на котором срез заканчивается (исключительно)
    Если не указан, берется длина последовательности.
  • шаг — интервал, с которым выбираются элементы (по умолчанию равен 1)

Примеры работы срезов в Python:

Код программы с примерами работы срезов в Python.
Код программы с примерами работы срезов в Python.

На что обратить внимание:

  • Первый элемент включительно - последний элемент не включительно
  • Возможность выбрать один элемент (обращение по индексу)
  • Возможность выбирать элементы с шагом (s[1:6:2])
bin() - встроенная функция в Python, для перевода чисел из десятичной системы счисления в двоичную

10 → ∞

ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ЛЮБУЮ ДРУГУЮ СИСТЕМУ СЧИСЛЕНИЯ

Действия всё те же, что и с переводом в двоичную. Только теперь делить нужно не на 2, а на основание системы счисления.

Например, при переводе в двоичную СС нужно было всегда делить на 2 и выписывать остатки. Теперь при переводе из 10-ой СС в 7-ую, делить надо на число 7 и также выписывать остатки. При переводе из 10-ой в 12-ую, надо делить на 12 и выписывать остатки.

Пример с переводом числа (234) из 10-ой в 5-ую:

Пример преобразования числа 234 из 10-ой СС в 5-ую СС. Ручной способ (без Python)
Пример преобразования числа 234 из 10-ой СС в 5-ую СС. Ручной способ (без Python)
Для перевода числа из десятичной системы счисления в любую другую систему счисления, необходимо каждый раз делить на основание этой СС и выписывать остатки
-15

▪ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ЛЮБУЮ ДРУГУЮ PYTHON

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

Принцип работы алгоритма аналогичен ручному методу: многократное деление числа на основание данной системы счисления и прибавление остатков. Всё это необходимо записать с помощью инструментов Python.

Основные моменты:

  • Создание переменной для результата деления (ans = '', тип str)
  • Использование цикла while для многократного повторения операций деления
  • % — остаток от деления в Python
  • // — целочисленное деление в Python
  • Использование конкатенации (склеивание) строк для записи остатков (+)

Универсальный алгоритм для перевода из десятичной системы счисления в любую другую ↓

Пример преобразования числа 25 из 10-ой СС в 3-ую. С помощью Python.
Пример преобразования числа 25 из 10-ой СС в 3-ую. С помощью Python.

Проверка:

25 ÷ 3 = 8 (остаток 1)

8 ÷ 3 = 2 (остаток 2)

2 ÷ 3 = 0 (остаток 2)

При переводе числа 25 из десятичной системы счисления в троичную систему счисления, получится число 221.

Объяснение основных моментов ↓

-17
-18
-19

✅ Вы можете самостоятельно выбрать в какую систему счисления перевести искомое число. Для этого необходимо изменить в алгоритме число, на которое выполняется деление:

-20

Перевод из 10 СС в 5 СС Python:

Пример преобразования числа 37 из 10-ой СС в 5-ую. С помощью Python.
Пример преобразования числа 37 из 10-ой СС в 5-ую. С помощью Python.

Проверка:

  • 37 ÷ 5 = 7 (остаток 2)
  • 7 ÷ 5 = 1 (остаток 2)
  • 1 ÷ 5 = 0 (остаток 1)

Выписываем остатки снизу - вверх и получим число: 122

Отдельно стоит рассмотреть перевод из десятичной системы в восьмеричную и шестнадцатеричную. Так как Python обладает встроенными функциями для быстрого перевода ↓

10 → 8

ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ВОСЬМЕРИЧНУЮ PYTHON

Для перевода из 10 СС в 8 СС через Python необходимо воспользоваться встроенной функцией — oct()

-22

Рассмотрим код программы на Python ↓

Перевод из 10 СС в 8 СС с помощью функции oct(). Python.
Перевод из 10 СС в 8 СС с помощью функции oct(). Python.

Проверка:

  • 123 ÷ 8 = 15 (остаток 3)
  • 15 ÷ 8 = 1 (остаток 7)
  • 1 ÷ 8 = 0 (остаток 1)

Как и с функцией bin(), перед ответом записаны два символа. Вновь, исправим это с помощью срезов в Python ↓

Код программы для перевода из 10-ой СС в 8-ую с помощью функции oct().
Код программы для перевода из 10-ой СС в 8-ую с помощью функции oct().

10 16

ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ШЕСТНАДЦАТЕРИЧНУЮ PYTHON

Для перевода из 10 СС в 16 СС через Python необходимо воспользоваться встроенной функцией — hex()

-25

Важный момент:

Алфавит 16 СС содержит латинские буквы: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Значит, при работе с 16 СС необходимо учитывать наличие латинских букв.

Код программы для перевода из 10 СС в 16СС с помощью функции hex(). Python.
Код программы для перевода из 10 СС в 16СС с помощью функции hex(). Python.

Проверка:

123 ÷ 16 = 7 (остаток 13) → вместо числа (13) нужно записать букву (b)

123 ÷ 16 = 7 (остаток b)

7 ÷ 16 = 0 (остаток 7)

123(10) = 7b(16)

Добавляем срез и вновь смотрим тип переменной:

Код программы для перевода из 10-ой СС в 16-ую с помощью функции hex().
Код программы для перевода из 10-ой СС в 16-ую с помощью функции hex().

Теперь рассмотрим переводы из различных систем счисления в 10 СС. Начнём, конечно же, с двоичной ↓

-28

2 → 10

ПЕРЕВОДЫ ИЗ ДВОИЧНОЙ В ДЕСЯТИЧНУЮ

Чтобы перевести число из двоичной системы счисления в десятичную, нужно выполнить следующие шаги:

  1. Пронумеруйте разряды двоичного числа справа налево, начиная с нуля.
  2. Умножьте каждую цифру двоичного числа на 2 в степени, соответствующей её разряду.
  3. Сложите полученные результаты. Сумма будет являться десятичным эквивалентом двоичного числа.

Подробный алгоритм:

Алгорит перевода чисел из 2 СС в 10 СС. Без использования Python.
Алгорит перевода чисел из 2 СС в 10 СС. Без использования Python.

Важное правило:

-30

▪ПЕРЕВОД ИЗ ДВОИЧНОЙ В ДЕСЯТИЧНУЮ PYTHON

Использование метода int(x, base)

-31

Синтаксис: int(x, base)

  • x — значение, которое нужно преобразовать в целое число (str)
  • base — основание системы счисления (от 2 до 36)

Перевод из 2 СС в 10 СС Python:

Пример перевода числа 111011 из 2 СС в 10 СС с помощью функции int() в Python.
Пример перевода числа 111011 из 2 СС в 10 СС с помощью функции int() в Python.

Зачем переменной (х) менять тип с int на str?

Рассмотрим пример где в функцию int() передаётся не строка, а целое число:

Пример неправильного кода. Когда в функцию int() передаётся число, а не строка.
Пример неправильного кода. Когда в функцию int() передаётся число, а не строка.

Что означает данная ошибка?

  • TypeError — ошибка типа (в переводе с английского) или ошибка в типах переменных
  • int() can't convert — int() не может преобразовать нестроковое значение с явной базой

Данная ошибка означает, что вы пытаетесь передать функции int() не строковое значение (str). Для перевода из различных СС в 10 СС в функцию int() должна поступать именно строка.

Важное правило:

Для правильного перевода в 10 СС с помощью встроенной функции int(), число должно быть в виде строки (str)

Варианты оформления:

Пример правильного перевода из 2 СС в 10 СС через Python.
Пример правильного перевода из 2 СС в 10 СС через Python.
Пример правильного перевода из 2 СС в 10 СС через Python.
Пример правильного перевода из 2 СС в 10 СС через Python.

▪(2 → 36) В 10 СС PYTHON

C помощью встроенной функции int() можно переводить из 2 СС по 36 СС в 10 СС. То есть из двоичной, троичной, четверичной ... до тридцатешестиричной, в десятичную СС.

Для этого необходимо указать второй аргумент в функции int():

int(число для перевода, система счисления)

Пример перевода из 4 СС в 10 СС:

Пример перевода числа (123123) из 4 СС в 10 СС с использованием функции int(). Python.
Пример перевода числа (123123) из 4 СС в 10 СС с использованием функции int(). Python.

Для перевода с помощью функции int() оснований больше 10, необходимо использовать латинские буквы ('A', 'B', 'C' и так далее) ↓

Пример перевода из 13 СС в 10 СС:

Пример перевода числа ('A1C') из 13 СС в 10 СС с использованием функции int(). Python.
Пример перевода числа ('A1C') из 13 СС в 10 СС с использованием функции int(). Python.

Если вы не указываете параметр base, по умолчанию используется 10 (десятичная система).

Пример перевода из 6 СС в 10 СС:

Пример перевода числа (235) из 6 СС в 10 СС с использованием функции int(). Python.
Пример перевода числа (235) из 6 СС в 10 СС с использованием функции int(). Python.

∞ → 10

ПЕРЕВОД ИЗ ЛЮБОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДЕСЯТИЧНУЮ PYTHON

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

Принцип работы алгоритма аналогичен ручному методу: нумерация разрядов, за которую отвечает цикл for, умножение каждой цифры на основание в степени.

Основные моменты:

  • Создание переменной для записи ответа (ans = 0, тип int)
  • Цикл for для прохода по разрядам числа
  • ** — возведение в степень Python
  • [::-1] — запись строки в обратном порядке Python (реверсирование)
  • int( ) для преобразования цифры из строчного формата в числовой

Универсальный алгоритм для перевода из любой системы счисления в десятичную ↓

Перевод числа (12212) из троичной СС в десятичную Python.
Перевод числа (12212) из троичной СС в десятичную Python.

f - string

МОЩНЫЙ ИНСТРУМЕНТ ДЛЯ ФОРМАТИРОВАНИЯ СТРОК

f - string (форматированные строки) в Python — это удобный способ вставки переменных и выражений прямо в строку. Начиная с версии Python 3.6

Чтобы использовать f - строки, нужно перед строкой поставить букву f или F. Внутри строки вы можете использовать фигурные скобки {} для вставки значений переменных или выражений.

Перевод в 2 СС, 8 СС, 16 СС с помощью f - строк:

Пример перевода числа (125) в 2 СС, 8СС и 16 СС в Python. С применением f - строк.
Пример перевода числа (125) в 2 СС, 8СС и 16 СС в Python. С применением 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 ..
-41

BONUS

🔥РАЗБОР ЗАДАНИЯ №14 ЕГЭ

Прямое сложение в СС

Условие задания №14 ЕГЭ.
Условие задания №14 ЕГЭ.

Попробуем более подробно посмотреть на условие, выделить основные моменты:

Условие задания №14 ЕГЭ (основные моменты)
Условие задания №14 ЕГЭ (основные моменты)

Дано число, записанное в 10 СС. Это число нужно перевести в 2 СС. Далее подсчитать количество единиц в полученном результате.

▪I способ (Универсальный, для всех типов СС)

1 шаг

Перевести число в двоичную систему счисления. Для этого воспользуемся универсальным алгоритмом (с помощью цикла While) ↓

  • x — cоздаём переменную и записываем в неё исходное число (int)
  • ** — оператор возведения в степень Python
  • s — создаём переменную для записи ответа (s = '', str)
-44
2 шаг
  • запускаем цикл while, пока (х) больше нуля
  • вычисляем остаток от деления (х) на 2 и приписываем к (s)
  • каждый раз делим (х) на 2
  • // — целочисленное деление Python
-45

В задаче необходимо найти количество единиц в двоичной записи числа. На данном этапе решения нам удалось перевести число в 2 СС.

Как узнать количество единиц в записи числа?

→ С помощью Python метода count()

Метод count() в Python помогает узнать, сколько раз встречается какой-либо символ внутри строки или другого набора данных

Пояснительные примеры:

Примеры работы метода count() Python.
Примеры работы метода count() Python.

🔥Универсальный алгоритм решения заданий ЕГЭ: Прямое Сложение в СС

Код программы для решения задание №14 ЕГЭ Прямое сложение в СС Python.
Код программы для решения задание №14 ЕГЭ Прямое сложение в СС Python.

▪II способ (Только для перевода в 2 СС)

❗Данный способ применим только, если в задаче говорится про перевод в 2 СС: "Сколько единиц содержится в двоичной записи выражения .."

Для решения вторым способом необходимо воспользоваться встроенной функцией Python — bin()

-48

C помощью функции bin() в Python можно сразу перевести число в двоичную систему счисления. Не используя при этом цикл while.

Код программы:

Алгоритм решения задания №14 ЕГЭ Python. Только для двочиной СС.
Алгоритм решения задания №14 ЕГЭ Python. Только для двочиной СС.

Пояснение к алгоритму:

Принцип остаётся тот же. Создаём переменную (х), записываем в неё число из условия. Далее используем встроенную функцию bin(). Эта функция переводит число из 10 СС в 2 СС. Главное, не забываем про срезы [2:], чтобы убрать префикс '0b' перед строкой.

Для особых ценителей короткой записи в Python 😉

🔥Решение в одну строку:

Решение в одну строку Задание №14 ЕГЭ ПРЯМОЕ СЛОЖЕНИЕ В СС PYTHON.
Решение в одну строку Задание №14 ЕГЭ ПРЯМОЕ СЛОЖЕНИЕ В СС PYTHON.

👏 Поздравляю! Получен верный ответ и программа работает без ошибок.

Удачи!

Повторяем материал:

▪Встроенные функции для перевода в Python:

▪Основные правила перевода:

▪10 СС - УНИВЕРСАЛЬНАЯ

🔜Материалы для успешной подготовки к ЕГЭ:

Всё, что нужно знать о типах данных в Python
МОЙ РЕПЕТИТОР2 февраля