Как перевести число из восьмеричной системы счисления в шестнадцатеричную в Python

Обложка к статье "Перевод из восьмеричной системы в шестнадцатеричную в Python"

В мире программирования часто возникает необходимость работать с числами, представленными в различных системах счисления. Одной из таких систем является восьмеричная система счисления, которая использует восемь цифр: от 0 до 7. В то время как шестнадцатеричная система счисления, как следует из названия, основана на шестнадцати символах: от 0 до 9 и от A до F.

В этой статье мы рассмотрим методы и инструменты, которые можно использовать в Python для перевода чисел из восьмеричной системы счисления в шестнадцатеричную. Мы рассмотрим как математический подход к этой задаче, так и использование встроенных функций Python. Кроме того, мы рассмотрим и ручную реализацию алгоритма перевода, чтобы лучше понять основы преобразования чисел между этими системами счисления.

Основы восьмеричной системы счисления

Восьмеричная система счисления основана на основании 8, и использует восемь различных цифр: от 0 до 7. Каждая позиция числа в восьмеричной системе имеет вес, который является степенью числа 8. Например, число 345 в восьмеричной системе представляет собой:

3 * 82 + 4 * 81 + 5 * 80
Таким образом, это численное значение равно 229 в десятичной системе счисления.

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

Основы шестнадцатеричной системы счисления

Шестнадцатеричная система счисления основана на основании 16 и использует шестнадцать различных цифр: от 0 до 9, а также от A до F. Каждая позиция числа в шестнадцатеричной системе имеет вес, который является степенью числа 16.

Например, число 3A7 в шестнадцатеричной системе можно интерпретировать следующим образом:

3 * 162 + 10 * 161 + 7 * 160

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

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

Математический подход к переводу числа из восьмеричной системы в шестнадцатеричную

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

Переводу числа из восьмеричной в шестнадцатеричную через двоичную систему

Одним из подходов является следующий:

  1. Преобразование восьмеричного числа в его эквивалент в двоичной системе.
  2. После этого, двоичное число преобразуется в его шестнадцатеричное представление.

Для выполнения этих действий нам помогут таблицы соответствия.

Таблица соответствия для перевода из восьмеричной в двоичную систему:

Восьмеричное число Двоичное число
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Таблица соответствия для перевода из двоичной в шестнадцатеричную систему:

Двоичное число Шестнадцатеричное число
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

Рассмотрим приме. Преобразуем число 345 из восьмеричной в шестнадцатеричную.

  1. Для начала преобразуем 345 в двоичную систему, использую таблицу соответствия:
    • 3 в восьмеричной системе  = 011 в двоичной системе
    • 4 в восьмеричной системе = 100 в двоичной системе
    • 5 в восьмеричной системе = 101 в двоичной системе
    • В итоге: 345 (в восьмеричной системе) = 011100101 (в двоичной системе)
  2. Далее, преобразуем двоичное число в шестнадцатеричное:
    • Разбиваем двоичное число на группы по четыре цифры начиная справа (в последней группе нам не хватает цифр, поэтому добавим нули): 0000 1110 0101
    • Каждую группу переводим в шестнадцатеричную систему: 0 E 5
    • Объединяем полученные шестнадцатеричные цифры в одно число.
    • Получаем результат: 345 (в восьмеричной системе) = E5 (в шестнадцатеричной системе).

Переводу числа из восьмеричной в шестнадцатеричную через десятичную систему

Перевод из восьмеричной в десятичную систему:

Чтобы перевести число из восьмеричной системы в десятичную, каждую цифру восьмеричного числа умножают на 8k, где k — порядковый номер цифры начиная с нуля и справа (первая цифра справа k = 0, вторая цифра справа k = 1 и т.д.), и складывают результаты.

Например, для числа 3458 мы проводим следующие вычисления:

3 * 82 + 4 * 81 + 5 * 80 = 3 * 64 + 4 * 8 + 5 * 1 = 192 + 32 + 5 = 22910

Перевод из десятичной в шестнадцатеричную систему:

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

Продолжаем делить полученное десятичное число на 16 до тех пор, пока результат деления не станет равным 0. Остатки от каждого деления образуют цифры шестнадцатеричного числа.

Например, для числа 22910 в шестнадцатеричной системе получим:

229 ÷ 16 = 14(остаток 5)
14 ÷ 16 = 0(остаток 14)

Используем таблицу соответствия десятичный и шестнадцатеричных цифр:

Десятичное Шестнадцатеричное
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 A
11 B
12 C
13 D
14 E
15 F

Получаем число E516.

Таким образом, число 3458 в шестнадцатеричной системе будет равно E516.

Использование встроенных функций Python для перевода числа из восьмеричной системы в шестнадцатеричную

Для преобразования восьмеричного числа в шестнадцатеричное мы можем использовать две встроенные функции:

  • int( ) — для преобразования восьмеричного числа в десятичное
  • hex( ) — для преобразования полученного десятичного числа в шестнадцатеричное

Напишем программу:

# Получение восьмеричного числа от пользователя
octal_number = input("Введите восьмеричное число: ")

# Преобразование восьмеричного числа в десятичное
decimal_number = int(octal_number, 8)

# Преобразование десятичного числа в шестнадцатеричное
hexadecimal_number = hex(decimal_number)[2:]  # Обрезаем префикс "0x"

print("Шестнадцатеричное представление числа:", hexadecimal_number)

Давайте разберем этот код подробнее:

  1. octal_number = input("Введите восьмеричное число: "): Запрашивает у пользователя ввод восьмеричного числа с помощью функции input() и сохраняет введенное значение в переменной octal_number.
  2. decimal_number = int(octal_number, 8): Преобразует восьмеричное число, хранящееся в переменной octal_number, в десятичное число. Функция int() принимает два аргумента: строку, которая представляет число, и основание системы счисления (в данном случае 8 для восьмеричной системы).
  3. hexadecimal_number = hex(decimal_number)[2:]: Преобразует десятичное число decimal_number в его шестнадцатеричное представление с помощью функции hex(). Затем с помощью среза [2:] удаляет префикс «0x» из шестнадцатеричной строки. Это делается, потому что функция hex() возвращает строку, начинающуюся с префикса «0x», чтобы указать, что это шестнадцатеричное число.
  4. print("Шестнадцатеричное представление числа:", hexadecimal_number): Выводит шестнадцатеричное представление числа на экран.

Ручная реализация алгоритма перевода через десятичную систему в Python

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

def octal_to_decimal(octal):
    decimal = 0
    power = 0
    # Преобразование восьмеричного числа в десятичное
    while octal != 0:
        digit = octal % 10
        decimal += digit * (8 ** power)
        power += 1
        octal //= 10
    return decimal

def decimal_to_hexadecimal(decimal):
    hexadecimal = ""
    # Преобразование десятичного числа в шестнадцатеричное
    while decimal != 0:
        remainder = decimal % 16
        if remainder < 10:
            hexadecimal = str(remainder) + hexadecimal
        else:
            hexadecimal = chr(ord('A') + remainder - 10) + hexadecimal
        decimal //= 16
    return hexadecimal

# Восьмеричное число для перевода
octal_number = int(input("Введите восьмеричное число: "))
# Перевод восьмеричного числа в десятичное
decimal_number = octal_to_decimal(octal_number)
# Перевод десятичного числа в шестнадцатеричное
hexadecimal_number = decimal_to_hexadecimal(decimal_number)

print(f"Шестнадцатеричное число: {hexadecimal_number}")

Этот код сначала преобразует восьмеричное число в десятичное с помощью функции octal_to_decimal, а затем преобразует десятичное число в шестнадцатеричное с помощью функции decimal_to_hexadecimal.

Давайте разберем подробно каждую часть данного кода:

def octal_to_decimal(octal):
    decimal = 0
    power = 0
    # Преобразование восьмеричного числа в десятичное
    while octal != 0:
        digit = octal % 10
        decimal += digit * (8 ** power)
        power += 1
        octal //= 10
    return decimal

Эта функция octal_to_decimal принимает на вход восьмеричное число и возвращает его эквивалент в десятичной системе счисления. Внутри функции используется цикл while, который выполняется до тех пор, пока значение octal не станет равным нулю. На каждой итерации извлекается последняя цифра восьмеричного числа с помощью операции взятия остатка от деления на 10 (octal % 10). Затем эта цифра умножается на соответствующую степень восьмерки и добавляется к переменной decimal. Затем степень увеличивается на единицу, а число octal делится на 10, чтобы удалить последнюю цифру. Процесс продолжается до тех пор, пока octal не станет равным нулю, после чего функция возвращает переменную decimal, которая содержит десятичное представление восьмеричного числа.

def decimal_to_hexadecimal(decimal):
    hexadecimal = ""
    # Преобразование десятичного числа в шестнадцатеричное
    while decimal != 0:
        remainder = decimal % 16
        if remainder < 10:
            hexadecimal = str(remainder) + hexadecimal
        else:
            hexadecimal = chr(ord('A') + remainder - 10) + hexadecimal
        decimal //= 16
    return hexadecimal

Эта функция decimal_to_hexadecimal принимает на вход десятичное число и возвращает его эквивалент в шестнадцатеричной системе счисления. Внутри функции также используется цикл while, который выполняется до тех пор, пока значение decimal не станет равным нулю. На каждой итерации извлекается остаток от деления десятичного числа на 16 (decimal % 16). Если остаток меньше 10, то он просто добавляется к строке hexadecimal. В противном случае (если остаток больше или равен 10), он преобразуется в соответствующий символ шестнадцатеричной системы (от ‘A’ до ‘F’) и добавляется к строке hexadecimal. Затем число decimal делится на 16, чтобы убрать последнюю цифру. Процесс продолжается до тех пор, пока decimal не станет равным нулю, после чего функция возвращает переменную hexadecimal, которая содержит шестнадцатеричное представление десятичного числа.

В основной части кода мы сначала запрашиваем у пользователя восьмеричное число, затем используем функцию octal_to_decimal для его преобразования в десятичное, а затем функцию decimal_to_hexadecimal для преобразования десятичного числа в шестнадцатеричное. Полученное шестнадцатеричное число выводится на экран.

Оцените статью
( Пока оценок нет )
Обучение Python