Системы счисления: двоичная, восьмеричная, шестнадцатеричная

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

Система счисления — это способ записи чисел с помощью набора цифр. Число цифр называют основанием системы.

Мы всю жизнь живём в десятичной

Когда ты пишешь число 254, ты используешь десятичную систему: в ней 10 цифр (0–9), а каждый разряд означает степень десятки. 254 — это 2·100 + 5·10 + 4·1. Почему именно 10? Скорее всего, потому что у человека 10 пальцев. Но это не единственный возможный выбор — компьютер, как мы знаем, предпочитает двоичную.

Идея любой системы счисления одна и та же: есть основание (число цифр), и каждый разряд — это степень основания. Разберём системы, важные для информатики.

Двоичная, восьмеричная, шестнадцатеричная

СистемаОснованиеЦифры
двоичная20, 1
восьмеричная80–7
десятичная100–9
шестнадцатеричная160–9, A, B, C, D, E, F

В шестнадцатеричной системе цифр не хватает, поэтому добавили буквы: A=10, B=11, C=12, D=13, E=14, F=15. Звучит непривычно, но к этому быстро привыкаешь.

Зачем нужны восьмеричная и шестнадцатеричная, если компьютер всё равно работает в двоичной? Дело в удобстве людей: двоичные числа очень длинные (255 — это 11111111), а в шестнадцатеричной то же число — короткое FF. И — красивая особенность — одна шестнадцатеричная цифра ровно соответствует четырём двоичным. Поэтому программисты записывают «машинные» числа в шестнадцатеричной системе: компактно и легко переводить.

Магия «1 цифра = 4 бита»

Разберём подробнее, почему шестнадцатеричная система так дружит с компьютером. Одна шестнадцатеричная цифра принимает 16 значений (0–F), а четыре бита тоже дают ровно 16 комбинаций (от 0000 до 1111). Значит, каждой шестнадцатеричной цифре точно соответствует четвёрка битов, без остатка. Например, байт 11111111 (8 битов) разбивается на две четвёрки 1111 и 1111, каждая из которых — это F, и весь байт записывается как FF. Коротко и однозначно! Поэтому когда программисту нужно показать содержимое памяти, цвет пикселя или адрес в сети, он пишет это в шестнадцатеричной системе. Кстати, цвета на сайтах задают именно так: #FF0000 — это чистый красный, где FF отвечает за красную составляющую на максимуме, а два 00 — за выключенные зелёную и синюю. Теперь, увидев такой код цвета, ты сможешь его «прочитать».

Как перевести в десятичную

Чтобы перевести число из любой системы в десятичную, раскладываем его по разрядам — степеням основания. Возьмём двоичное 101010:

1·2⁵ + 0·2⁴ + 1·2³ + 0·2² + 1·2¹ + 0·2⁰
= 32 + 0 + 8 + 0 + 2 + 0 = 42

Тот же приём работает для восьмеричной (степени 8) и шестнадцатеричной (степени 16). А обратный перевод — делением на основание с остатками, как мы делали для двоичной.

Попробуй сам

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

chislo = 42

print("Десятичное:", chislo)
print("Двоичное:", bin(chislo))      # приставка 0b
print("Восьмеричное:", oct(chislo))  # приставка 0o
print("Шестнадцатеричное:", hex(chislo))  # приставка 0x

# Обратный перевод: из строки в нужной системе — в десятичное число
print()
print("11111111 (двоичное) =", int("11111111", 2))
print("FF (шестнадцатеричное) =", int("FF", 16))
print("52 (восьмеричное) =", int("52", 8))

Вывод:

Десятичное: 42
Двоичное: 0b101010
Восьмеричное: 0o52
Шестнадцатеричное: 0x2a

11111111 (двоичное) = 255
FF (шестнадцатеричное) = 255
52 (восьмеричное) = 42

Видишь? Число 42 — это 101010 в двоичной, 52 в восьмеричной и 2a в шестнадцатеричной. Одно и то же число, просто записано разными «алфавитами». Поменяй chislo на 255 и посмотри, как красиво оно выглядит в шестнадцатеричной (0xff). Это любимые числа экзамена — потренируйся переводить!

Ещё разок: таблица чисел во всех системах

Чтобы окончательно «почувствовать» системы счисления, полезно увидеть, как одни и те же числа выглядят в разных записях. Построим такую табличку для первых чисел — и сразу заметим закономерности.

print("10-я  2-я     8-я   16-я")
for n in range(0, 17):
    dvoich = bin(n)[2:]      # убираем приставку 0b
    vosmer = oct(n)[2:]      # убираем 0o
    shestn = hex(n)[2:].upper()  # убираем 0x, буквы заглавные
    print(f"{n:3}   {dvoich:6} {vosmer:4}  {shestn}")

Вывод:

10-я  2-я     8-я   16-я
  0   0      0     0
  1   1      1     1
  2   10     2     2
  3   11     3     3
  4   100    4     4
  5   101    5     5
  6   110    6     6
  7   111    7     7
  8   1000   10    8
  9   1001   11    9
 10   1010   12    A
 11   1011   13    B
 12   1100   14    C
 13   1101   15    D
 14   1110   16    E
 15   1111   17    F
 16   10000  20    10

Сколько всего интересного видно! Двоичная запись «переполняется» (добавляет разряд) на 2, 4, 8, 16 — степенях двойки. Восьмеричная — на 8 (после 7 идёт 10). Шестнадцатеричная использует буквы A–F для чисел 10–15, а «десяток» (запись 10) у неё наступает только на числе 16. Поменяй верхнюю границу range на 33 и посмотри, как ведут себя числа дальше. Эта табличка — отличная шпаргалка: разобравшись в ней, ты легко переведёшь любое небольшое число в уме.

Частые ошибки

  • Забывать про буквы A–F в шестнадцатеричной. После 9 идут A=10, B=11 ... F=15, и только потом 10 (это уже 16 в десятичной).
  • Путать основания при раскладе. Для двоичной — степени 2, для восьмеричной — 8, для шестнадцатеричной — 16.
  • Считать, что разные записи — это разные числа. 0b101010, 0o52, 0x2a и 42 — одно и то же число.

Запомни

  • Основание системы — это число используемых цифр; каждый разряд — степень основания.
  • Двоичная (0,1), восьмеричная (0–7), шестнадцатеричная (0–9, A–F).
  • В десятичную переводят разложением по степеням основания, обратно — делением с остатками.
  • Шестнадцатеричная компактно записывает двоичные числа: 1 цифра = 4 бита.
Проверьте себя
1. Чему равно шестнадцатеричное число FF в десятичной системе?
A15
B160
C255
D256
2. Какие цифры используются в восьмеричной системе счисления?
A0 и 1
Bот 0 до 7
Cот 0 до 9
D0–9 и A–F
3. Зачем программисты используют шестнадцатеричную систему?
AОна единственная, что понимает компьютер
BОна компактно записывает длинные двоичные числа: 1 цифра = 4 бита
CВ ней проще складывать
DТак требует закон
4. Двоичное число 1000 равно в десятичной системе...
A2
B4
C8
D1000

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект