Глава 4 · Python любит числа

Как записывать числа: системы счисления

Десятичная система — не единственная. Разберём двоичную, восьмеричную и шестнадцатеричную запись — и зачем они вообще нужны программисту.

Мы привыкли записывать числа в десятичной системе (base 10) — десять цифр, от 0 до 9. Но это не единственный способ, и компьютеры часто используют другие системы счисления.

Четыре системы, с которыми вы встретитесь

СистемаОснованиеЦифрыPython-литерал
Десятичная (decimal)100–910
Двоичная (binary)20–10b1010
Восьмеричная (octal)80–70o12
Шестнадцатеричная (hexadecimal)160–9, A–F0xA
100b10100o120xAодно и то жечисло
Четыре записи — один и тот же результат

Как читать позиционную запись

В любой системе счисления каждая позиция цифры имеет свой «вес» — степень основания. Возьмём двоичное число 1010:

1
×8
0
×4
1
×2
0
×1
+
+
+
= 10
1010₂ = 1×8 + 0×4 + 1×2 + 0×1 = 10

Ровно тот же принцип работает и для десятичной системы, которой вы пользуетесь каждый день — просто вес позиций там 1000, 100, 10, 1 (степени десяти), а не степени двойки.

Зачем программисту шестнадцатеричная система

Шестнадцатеричная запись встречается на практике куда чаще, чем кажется:

cvet.py
red = 0xFF
print(red)  # 255

Функции bin(), oct(), hex()

Переводят число ИЗ десятичной записи В строку с другой системой счисления:

v_druguyu_sistemu.py
print(bin(10))  # '0b1010'
print(oct(10))  # '0o12'
print(hex(10))  # '0xa'

int() с указанием основания — обратное преобразование

А функция int() с двумя аргументами делает обратное — читает текст в указанной системе счисления и возвращает обычное (десятичное) число:

iz_teksta.py
print(int("1010", 2))  # 10
print(int("FF", 16))   # 255
Попробуем
Переведите свой год рождения в двоичную и шестнадцатеричную запись через bin() и hex() — а затем переведите результат обратно через int(..., 2) и int(..., 16), чтобы убедиться, что получили то же число.
Практика: переводчик систем счисления
Интерактивный ноутбук прямо в браузере — bin(), oct(), hex(), int(x, base)
Открыть практику →