Python Glossary English

все Python 3Алгоритмы и структуры данныхпонятие

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

математика

Перевод между двоичной, восьмеричной, десятичной и шестнадцатеричной системами.

Синтаксис

bin(n), oct(n), hex(n)
int(s, base)

bin(), oct() и hex() возвращают не число, а строку с префиксом 0b/0o/0x — складывать их как числа нельзя, и len(bin(n)) на два больше количества разрядов; голые цифры даёт format(n, 'b'). Обратно строку разбирает int(s, base), причём префикс он допускает, а int(s, 0) сам определяет систему по этому префиксу. У отрицательных bin(-5) даёт '-0b101' — знак минус перед модулем, а не дополнительный код, как в C.

Примеры

# Десятичное → другие
print(bin(42))   # → 0b101010
print(oct(42))   # → 0o52
print(hex(42))   # → 0x2a
print(f'{42:b}')  # → 101010 (без префикса)
print(f'{42:o}')  # → 52
print(f'{42:x}')  # → 2a
print(f'{42:X}')  # → 2A
# Другие → десятичное
print(int('101010', 2))  # → 42
print(int('52', 8))      # → 42
print(int('2a', 16))     # → 42
print(int('0b101010', 2))  # → 42
# Литералы
a = 0b1010  # двоичный
b = 0o17    # восьмеричный
c = 0xff    # шестнадцатеричный
print(a, b, c)  # → 10 15 255
# Произвольное основание
def to_base(n, base):
    digits = '0123456789ABCDEF'
    if n < base: return digits[n]
    return to_base(n//base, base) + digits[n%base]
print(to_base(255, 16))  # → FF
print(to_base(10, 2))    # → 1010
# Форматирование с заполнением
print(f'{255:08b}')  # → 11111111
print(f'{15:04x}')   # → 000f
print(format(42, '08b'))  # → 00101010
# Перевод RGB hex
color = '#ff5733'
r, g, b = int(color[1:3],16), int(color[3:5],16), int(color[5:7],16)
print(r, g, b)  # → 255 87 51
# ASCII и ord
print(ord('A'))  # → 65 (это 0x41)
print(hex(ord('A')))  # → 0x41

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности