Как перевести в 15 систему счисления питон
Перейти к содержимому

Как перевести в 15 систему счисления питон

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

Заметим, что в языке Python есть встроенная функция bin , которая переводит десятичное число в двоичную систему счисления.

>>> bin(5) '0b101' >>> bin(10) '0b1010'

Здесь же рассматривается алгоритм такого перевода и его реализация на Python.

Обычно десятичное число преобразуют к двоичному представлению путем нахождения остатков от деления на 2. При этом полученное на предыдущем шаге частное выступает в качестве делимого на следующем шаге. Деление заканчивается, когда делимое обращается в ноль. Остатки собираются в двоичное число начиная с конца, то есть последний остаток будет первой цифрой двоичного числа. Например, надо перевести число 8 в двоичную систему:

  • 8 / 2 = 4, остаток 0
  • 4 / 2 = 2, остаток 0
  • 2 / 2 = 1, остаток 0
  • 1 / 2 = 0, остаток 1
  • 0 — конец деления
  • Сборка: 10002

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

n = int(input()) b = '' while n > 0: b = str(n % 2) + b n = n // 2 print(b)
8 1000

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

n = int(input()) b = [] while n > 0: b.append(n % 2) n //= 2 b.reverse() for i in b: print(i, end='') print()

Метод reverse списка изменяет последовательность элементов на обратную.

X Скрыть Наверх

Решение задач на Python

Системы счисления

В системе счисления с основанием больше 10, цифры записываются так: 0, 1, 2, . 9, A, B, C, .

В тексте программ на языке Python можно использовать целочисленные константы, записанные в двоичной (префикс 0b ), восьмеричной (префикс 0o ) и шестнадцатеричной (префикс 0x ) системах счисления. После указанного префикса идут цифры, которые в двоичной системе счисления могут быть только 0 или 1, в восьмеричной — от 0 до 7, в шестнадцатеричной — от 0 до 9, а также буквы латинского алфавита от A до F (могут быть как строчными, так и заглавными). Например, десятичной число 179 можно задать несколькими способами.

A = 179 A = 0b10110011 A = 0o263 A = 0xB3

Если вы знаете стандартные функции языка Python для перевода представления чисел между различными системами счисления, то этими функциями пользоваться нельзя. Также нельзя использовать функции типа eval , exec и т.д.

Если программа выводит результат в системе счисления с основанием больше 10, то цифры записываются так: 0, 1, 2, . 9, A, B, C, .

A: Шестнадцатеричную цифру в int

Дана шестнадцатеричная цифра, записанная в строке из одного символа. Определите её числовое значение.

Решение оформите в виде функции hex2int(c: str) -> int.

На проверку сдайте только тело функции.

В решении нельзя использовать списки, словари, строки типа «ABCDEF» и т.д.

hex2int('9')
hex2int('F')

B: int в шестнадцатеричную цифру

Решите задачу, обратную предыдущей.

Решение оформите в виде функции int2hex(n: int) -> str.

int2hex(9)
int2hex(15)

C: Из двоичной в int

Дано число, записанное в двоичной системе счисления. Переведите его в тип int.

Решение оформите в виде функции bin2int(s: str) -> int .

Решение должно использовать схему Горнера.

bin2int('10110011')

D: Из шестнадцатеричной в int

Решите предыдущую задачу в случае, когда входное число задано в шестнадцатеричном виде. Соответствующая функция должна называться hex2int(s: str) -> int.

hex2int('B3')

E: Из int в двоичную

Переведите число из int в двоичную систему числения.

Решение оформите в виде функции int2bin(n: int) -> str.

int2bin(179)
'10110011'

F: Из int в шестнадцатеричную

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

Решение оформите в виде функции int2hex(n: int) -> str.

int2hex(179)

G: Из любой в любую

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

На вход программа получает три величины: n, A, k, где n и k – натуральные числа от 2 до 36: основания системы счисления, A – число, записанное в в системе счисления с основанием n, A

Необходимо вывести значение A в системе счисления с основанием k без лидирующих нулей.

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

2
101111
16
10
35
36

H: Из шестнадцатеричной в двоичную

Переведите число из шестнадцатеричной системы счисления в двоичную. Исходное число может быть очень большим (до \(2\times10^5\) символов). Необходимо вывести результат без лидирующих нулей.

Решение оформите в виде функции hex2bin(s: str) -> str

hex2bin('2F')
'101111'

I: Из двоичной в шестнадцатеричную

Переведите число из двоичной системы счисления в шестнадцатеричную. Исходное число может быть очень большим (до \(12\times10^6\) символов).

Решение оформите в виде функции bin2hex(s: str) -> str

bin2hex('101111')

J: Из уравновешенной троичной в int

В уравновешенной троичной системе счисления используется основание 3 и три цифры: 0, 1 и -1. Цифру -1 будем обозначать знаком $. Достоинство уравновешенной троичной системы счисления: простота хранения отрицательных чисел и удобство нахождения числа, противоположному данному.

Вот как записываются небольшие числа в уравновешенной троичной системе счисления:

Десятичная -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
Уравнов. троичная $00 $01 $1$ $10 $11 $$ $0 $1 $ 0 1 1$ 10 11 1$$ 1$0 1$1 10$ 100

Подробней о уравновешенной троичной системе счисления можно прочитать в Википедии (статья Троичная система счисления, там используется термин «троичная симметричная система счисления»).

Дана запись числа в уравновешенной троичной системе счисления. Переведите её в значение типа int.

Решение оформите в виде функции ter2int(s: str) -> int

ter2int('$01')

K: Из фибоначчиевой в int

Рассмотрим последовательность Фибоначчи: \(\varphi_1=1\), \(\varphi_2=2\), \(\varphi_n=\varphi_+\varphi_\) при \(n\gt 2\). В частности, \(\varphi_3=3\), \(\varphi_4=5\), \(\varphi_5=8\) и т.д.

Любое натуральное число можно представить в виде суммы нескольких членов последовательности Фибоначчи. Такое представление будет неоднозначным, но если наложить дополнительное условие, что в представлении нет двух соседних членов последовательности Фибоначчи, то представление становится единственным.

Будем говорить, что число \(A\) представимо в фибоначчиевой системе счисления в виде \(a_ka_. a_1\), где \(a_i\in\\), если \(A=a_k\varphi_k+. +a_1\varphi_1\) и в записи \(a_ka_. a_1\) нет двух единиц подряд.

Вот как записываются небольшие числа в фибоначчиевой системе счисления:

Десятичная 1 2 3 4 5 6 7 8 9 10 11 12 13
Фибоначчиева 1 10 100 101 1000 1001 1010 10000 10001 10010 10100 10101 100000

Подробней о фибоначчиевой системе счисления можно прочитать в Википедии (статья Фибоначчиева система счисления).

Дана запись числа в фибоначчиевой системе счисления. Переведите его в тип int.

Решение оформите в виде функции fib2int(s: str) -> int

fib2int('10101')

L: Из int в уравновешенную троичную

Дано целое число oт \(-2\times 10^9\) до \(2\times 10^9\). Найдите его представление в уравновешенной троичной системе счисления без лидирующих нулей (за исключением числа 0, запись которого имеет вид 0).

Решение оформите в виде функции int2ter(n: int) -> str

int2ter(-8)

M: Из int в фибоначчиеву

Дано целое число oт 1 до \(2\times 10^9\). Выведите его представление в фибоначчиевой системе счисления без лидирующих нулей.

Решение оформите в виде функции int2fib(n: int) -> str

int2fib(12)
'10101'

N: Инкремент

Дана запись числа в некоторой системе счисления. Увеличьте число на 1 и верните его представление в этой же системе счисления. Сдайте на проверку только тело функции.

Решение оформите в виде функции inc(n: str, base: int) -> str .

Первый параметр — запись числа в некоторой системе счисления, запись содержит символы ‘0’, . ‘9’, ‘A’, . ‘Z’, второй параметр — основание системы счисления, не превосходящее 36. Длина числа не превосходит 100000 символов.

inc('19A', 11)

O: Декремент

Решите аналогичную задачу для уменьшения числа на 1.

Решение оформите в виде функции dec(n: str, base: int) -> str .

dec('1A0', 11)

P: Инкремент в уравновешенной троичной системе счисления

Реализуйте инкремент числа в уравновешенной троичной системе счисления.

Решение оформите в виде функции inc_ter(n: str) -> str .

Входная строка может иметь длину до 100000 символов.

inc_ter('$01')

Q: Декремент в уравновешенной троичной системе счисления

Реализуйте декремент числа в уравновешенной троичной системе счисления.

Решение оформите в виде функции dec_ter(n: str) -> str .

Входная строка может иметь длину до 100000 символов.

dec_ter('$1$')

R: Фибоначчиев инкремент

Реализуйте инкремент числа в фибоначчиевой системе счисления.

Решение оформите в виде функции inc_fib(n: str) -> str .

Входная строка может иметь длину до 100000 символов.

inc_fib('100101')
'101000'

S: Фибоначчиев декремент

Реализуйте декремент числа в фибоначчиевой системе счисления.

Решение оформите в виде функции dec_fib(n: str) -> str .

Входная строка может иметь длину до 100000 символов.

dec_fib('101000')
'100101'

T: Шестнадцатеричное сложение

Дано два шестнадцатеричных числа, длиной до 100000 символов каждый. Вычислите их сумму.

Решение оформите в виде функции sum_hex(n1: str, n2: str) -> str .

sum_hex('F1', 'F')

U: Уравновешенное троичное сложение

Реализуйте сложение в уравновешенной троичной системе счисления.

Решение оформите в виде функции sum_ter(n1: str, n2: str) -> str .

sum_ter('1$$$', '$0$')

Пример соответствует выражению 14+(-10)=4.

V: Фибоначчиево сложение

Реализуйте сложение в фибоначчиевой системе счисления.

Решение оформите в виде функции sum_fib(n1: str, n2: str) -> str .

Сложность решения: квадрат от длины входных чисел (длина входных чисел до 1000 знаков, ограничение по времени — 1 секунда).

sum_fib('10010', '10101')
'1000001'

W: Шестнадцатеричное вычитание

Реализуйте алгоритм вычитания двух чисел, записанных в шестнадцатеричной системе счисления.

Решение оформите в виде функции dif_hex(n1: str, n2: str) -> str .

Сложность решения: линейная от длины входных чисел (длина чисел до 100000 знаков, ограничение по времени — 1 секунда).

dif_hex('100', 'F')

X: Фибоначчиево вычитание

Реализуйте вычитание в фибоначчиевой системе счисления.

Решение оформите в виде функции dif_fib(n1: str, n2: str) -> str . Гарантируется, что первое данное число не меньше второго.

Сложность решения: квадрат от длины входных чисел (длина чисел до 1000 знаков, ограничение по времени — 1 секунда).

dif_fib('1000001', '10101')
'10010'

Y: Умножение длинного числа на короткое

Реализуйте алгоритм умножения длинного числа, записанного в шестнадцатеричной системе счисления, на короткое число (из одной шестнадцатеричной цифры).

Решение оформите в виде функции mul_hex(n1: str, n2: str) -> str . Гарантируется, что второй параметр состоит ровно из одной цифры.

Сложность решения: линейная от длины первого числа (длина числа до 100000 знаков, ограничение по времени — 1 секунда).

Не забудьте, что в ответе может получиться 0, который записывается строкой «0».

mul_hex('A38', 'D')
'84D8'

Z: Шестнадцатеричное умножение

Реализуйте алгоритм умножения двух чисел, записанных в шестнадцатеричной системе счисления.

Решение оформите в виде функции mul_hex(n1: str, n2: str) -> str .

Сложность решения: квадрат от длины входных чисел (длина чисел до 1000 знаков).

  • Использование длинной арифметики Python (например, привести число в int, перемножить, перевести обратно в строку).
  • Переход к большему основанию системы счисления (например, к основанию 256 или 65536).
  • Переведите строку в список цифр (значений типа int), все вычисления проводите только с числами, а не со строками. Перевод обратно в строку выполняйте в самом конце.
  • “Разверите“ число: под индексом \(i\) в списке должна храниться цифра, соответствующая \(16^i\). Тогда при перемножении двух цифр \(a_i\) и \(b_j\) результат попадает в разряд \(i+j\).
  • Можно не обращать внимания на переполнения разрядов и не следить за тем, что все полученные цифры будут меньше 16. Считайте, что вы храните произвольные коэффициенты, соответствующие степеням основания, а нормализацию представления выполните в самом конце.
mul_hex('A1', '7F')
'4FDF'

ZA: Развёрнутая фибоначчиева форма

В развёрнутой фибоначчиевой форме запись числа в фибоначчиевой системе счисления не содержит двух подряд идущих нулей. Для каждого числа существует единственное представление в развёрнутой фибоначчиевой форме.

Дано целое число oт 1 до 2·10 9 . Найдите его представление в развёрнутой фибоначчиевой форме.

Решение оформите в виде функции int2fib(n: int) -> str

int2fib(13)
'10110'

ZZ: Умножение Карацубы

Реализуйте алгоритм умножения длинных чисел, записанных в шестнадцатеричной системе счисления, при помощи метода Карацубы.

Решение оформите в виде функции mul_hex(n1: str, n2: str) -> str .

Требования к решению: вычисления должны проводиться в 16-ричной системе счисления (нельзя переходить к большему основанию, например, 256 или 65536). Длина входных чисел — до 10000 знаков, ограничение по времени — 10 секунд.

Советы по реализации

  • Метод Карацубы — рекурсивный алгоритм, вы сводите задачу умножения длинных чисел к задаче умножение чисел меньшей длины. При этом при маленькой длине чисел метод Карацубы не даёт выгоды, используйте умножение “в столбик”. Скорее всего при длинах чисел меньше 100 выгоднее использовать умножение “в столбик”, а не метод Карацубы. Возможно, вам придется подбирать эту границу экспериментально.
  • Можно не обращать внимания на переполнение разрядов и даже можно считать, что при умножении в некоторых разрядах могут получаться отрицательные значения (там же есть вычитание). Да и вычитание можно реализовать без заёма значений из старших разрядов, просто считайте, что цифры могут быть и отрицательными. Нормализацию представления результата выполняйте в самом конце.
mul_hex('A1', '7F')

Перевод десятичного числа в любую систему счисления

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

Решение задачи на языке программирования Python

Алгоритм перевода десятичного числа в любую другую систему счисления заключается в последовательном целочисленном делении сначала самого десятичного числа, а потом получаемых частных на основание системы счисления, в которую переводится число. Из остатков такого деления собирается представление числа в новой системе счисления. В той, на основание которой происходило деление. Сбор остатков происходит с конца.

Например, перевод десятичных чисел 160 в восьмеричную и 18 в двоичную системы счисления будет выглядеть так:

160 / 8 = 20 | 0 20 / 8 = 2 | 4 2 / 8 = 0 | 2

16010 = 2408

18 / 2 = 9 | 0 9 / 2 = 4 | 1 4 / 2 = 2 | 0 2 / 2 = 1 | 0 1 / 2 = 0 | 1

1810 = 100102

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

150 // 10 = 15 | 0 15 // 10 = 1 | 5 1 // 10 = 0 | 1

15010 = 15010

Проблема появляется в тот момент, когда основание системы счисления начинает превышать 10. В таких случаях нам не хватает привычных символов цифр (0-9) и требуется ввод дополнительных символов для обозначения значений, соответствующих десятичным числам 10, 11, 12 и т. д. Для примера переведем десятичное число в шестнадцатеричную систему счисления:

700 // 16 = 43 | 12 (C) 43 // 16 = 2 | 11 (B) 2 // 16 = 0 | 2

70010 = 2BC16

Десятичные остатки 12 и 11 при формировании шестнадцатеричного числа должны быть представлены одним разрядом. В таких случаях в качестве цифр, чье значение больше 9-ти, используются английские буквы. Так числу 10 будет соответствовать символ A , числу 11 — B и т. д.

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

Будем усложнять программу поэтапно и сначала напишем вариант кода, который переводит не в любую систему счисления, а только с основанием до 10-ти.

num = int(input()) base = 0 while not (2  base  9): base = int(input("Основание (2-9): ")) new = '' while num > 0: remainder = num % base new = str(remainder) + new num = num // base print(new)

В цикле сначала вычисляется остаток. Далее присоединям его спереди к строковой переменной new , в которой хранится представление числа в новой системе счисления. Последним действием присваиваем переменной num частное от целочисленного деления прежнего значения num на основание системы счисления.

Поскольку в языке программирования Python есть функция divmod , сократим код, объединив нахождение остатка и целочисленное деление:

. while num > 0: num, remainder = divmod(num, base) new = str(remainder) + new .

Вызов divmod(num, base) возвращает кортеж из частного и остатка от деления num на base . Далее частное присваивается num , остаток — remainder .

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

num = int(input()) base = 16 letters = 'ABCDEF' new = '' while num > 0: num, remainder = divmod(num, base) if remainder > 9: letter_id = remainder - 10 remainder = letters[letter_id] new = str(remainder) + new print(new)

Числу 10 соответствует символ A . Поэтому если остаток равен десяти, то letter_id будет равно нулю. Символ под индексом 0 в строке букв — как раз A . Если остаток равен 15-ти, то letter_id будет равно пяти, а letters[5] вернет F .

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

num = int(input()) base = 16 letters = '0123456789ABCDEF' new = '' while num > 0: num, remainder = divmod(num, base) new = letters[remainder] + new print(new)

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

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

num = int(input()) base = 0 while not (2  base  36): base = int(input("Основание (2-36): ")) new = '' while num > 0: num, remainder = divmod(num, base) if remainder > 9: letter = remainder - 10 remainder = chr(ord('A') + letter) new = str(remainder) + new print(new)

Вызов ord(‘A’) возвращает код буквы A в таблице Unicode. К этому коду-числу мы прибавляем смещение по алфавиту (значение letter ). С помощью функции chr() получаем соответстующую коду букву.

def convert_integer(decimal, radix): if radix > 36: return "Основание системы счисления должно быть не больше 36-ти" number = '' while decimal > 0: decimal, remainder = divmod(decimal, radix) if remainder > 9: remainder = chr(ord('A') + remainder - 10) number = str(remainder) + number return number num = int(input("Десятичное число: ")) base = int(input("Основание (2-36): ")) print(convert_integer(num, base))

Ограничение по основанию в 36 связано с количеством букв в английском алфавите. Их 26, плюс десять цифр. Расширить диапазон оснований можно за счет взятия недостающих символов из какой-либо другой части таблицы Unicode. Например, можно добавить к условному оператору ветку elif с условием remainder > 35 , а в теле вычитать из remainder 36.

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

X Скрыть Наверх

Решение задач на Python

Расширенное представление чисел. Системы счисления

На этом занятии мы поговорим о различных форматах представления чисел в Python. Мы с вами неоднократно записывали в программе целые и вещественные значения в виде:

a = 500 b = 0.01

Это классическая запись. Еще существует экспоненциальная, когда числа записываются через степень десятки. Например, число:

Здесь e2 – это 10 в квадрате, то есть, 100 и оно умножается на 5, получаем 500. Причем, обратите внимание, число 500 представляется как вещественное, а не целое.

Аналогичным образом можно задать и второе значение 0,01 как:

Здесь e-2 – это 10 в минус второй степени, то есть, 0,01 и все умножается на 1. Причем, единичка вначале строго обязательна – это формат записи чисел: сначала идет число, которое умножается на степень десятки.

Зачем это может понадобиться? Часто в инженерных задачах оперируют очень большими или очень малыми числами. Например, мы хотим указать шаг сходимости градиентного алгоритма как 10^-8. Записывать это число в классическом виде:

не очень удобно, да и легко ошибиться в количестве нулей. А вот в экспоненциальной форме все очень удобно и наглядно:

И то же самое с очень большими числами, например, число Авогадро (примерно):

6,02 * 10^23 = 6.02e23

Прописывать такое число в классическом виде было бы совсем уж неудобно. Причем, вначале указано вещественное число 6,02, а затем, степень десятки. Так тоже можно делать.

Думаю, вы теперь знаете и сможете применять в своих программах экспоненциальную запись для чисел. Далее, мы с вами посмотрим, как можно представлять числа не только в десятичном формате, как это делали до сих пор, но и в других системах счисления: двоичной, шестнадцатеричной, восьмеричной. На самом деле их бесконечно много, так как можно придумать любую свою систему, скажем 132-ричную или еще какую, но на практике в 99% случаях ограничиваются именно такими.

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

123 = 1*10^2 + 2*10^1 + 3*10^0

При этом, нам достаточно иметь десять различных цифр для представления любого числа.

Если же переходим к двоичной системе счисления, что все числа кодируются двумя символами: 0 и 1 – это все цифры двоичной системы (они называются битами). В результате, получаем, например, такие записи чисел в этой системе счисления:

001 = 0*2^2 + 0*2^1 + 1*2^0 = 1
1101 = 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 13
10001101 = 1*2^7 + 1*2^3 + 1*2^2 + 1*2^0 = 141

Я здесь сразу привел их перевод в десятичную систему счисления, учитывая, что все позиции цифр – это соответствующие степени двойки. Так вот, в Python мы можем записывать числа непосредственно в двоичной системе, следующим образом:

a = 0b001 b = 0b1101 c = 0b10001101

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

d = -0b1111

Конечно, первая реакция человека, впервые столкнувшегося с двоичным представлением чисел, зачем это нужно? Куда привычнее использовать десятичную запись. Да, и часто именно ее применяют. Но бывают ситуации, например, работа с числами на уровне бит, когда нам требуется включить или выключить отдельный бит числа, или проверить является ли текущий бит равным 1 (то есть включенным) или 0 (выключенным). Здесь двоичное представление нам помогает визуализировать такой процесс.

Следующая часто используемая система счисления – шестнадцатеричная. Здесь уже используется 16 различных обозначений. Для этого берут десять цифр из десятичной системы и еще первые шесть букв латинского алфавита:

Числа принимают уже такой вид:

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

1A = 1*16^1 + A*16^0 = 26
FB = F*16^1 + B*16^0 = 240 + 11 = 251
C2DE = C*16^3 + 2*16^2 + D*16^1 + E*16^0 = 49886

Здесь буква A соответствует значению 10 в десятичной системе, поэтому получаем значение 26. Буква F = 15, B = 11, поэтому имеем значение 251. А последнее число расшифруйте самостоятельно, должно получиться значение 49886.

В чем ценность шестнадцатеричной системы счисления? Она получила широкое распространение благодаря удобному представлению байтовых данных. Один байт – это восемь бит. Если разделить байт на две части, то получим по четыре бита. В эти четыре бита можно записать одно из шестнадцати значений, то есть, одно из значений шестнадцатеричной системы счисления:

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

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

В Python можно записывать числа сразу в шестнадцатеричной системе, например:

a = 0x1A

Причем, можно использовать не только заглавные, но и малые латинские буквы:

b = 0xde c = 0xaa3f

Везде получаем целые положительные значения. Для определения отрицательных чисел можно вначале указать унарный минус:

d = -0x342

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

27 = 2*8^1 + 7*8^0 = 23
54 = 5*8^1 + 4*8^0 = 44
775 = 7*8^2 + 7*8^1 + 5*8^0 = 509

Здесь я сразу перевел их в десятичный вид. Если нам нужно определить число в восьмеричной системе, то в Python используется следующая запись:

a = 0o27 b = 0o54 c = -0o775

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

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#10. Основные методы строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#20. Оператор цикла while

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#41. Рекурсивные функции

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#44. Замыкания в Python

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#54. Выражения генераторы

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

#66. Аннотация базовыми типами

#67. Аннотации типов коллекций

#68. Аннотации типов на уровне классов

#69. Конструкция match/case. Первое знакомство

#70. Конструкция match/case с кортежами и списками

#71. Конструкция match/case со словарями и множествами

#72. Конструкция match/case. Примеры и особенности использования

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *