Системы счисления: что это, какие бывают и чем отличаются

Системы счисления: что это, какие бывают и чем отличаются

Python 3.13, правила не меняютсяОпубликовано 12 января 2024Обновлено 9 января 20267 мин чтения
Три счётных рамки с разным числом бусин на стержнях
Коротко
  • Система счисления — набор знаков и правил, по которым числа записывают и читают.
  • В позиционных системах значение цифры зависит от места в записи, в непозиционных — нет.
  • Основание позиционной системы равно количеству её цифр: 10, 2, 8 или 16.
  • Систему по записи определяют по индексу основания или по префиксу: 101₂, 0b101, 0x1A.
Содержание8 разделов ▾
  1. Число и цифра
  2. Непозиционные системы
  3. Позиционные системы
  4. Десятичная, двоичная, восьмеричная, шестнадцатеричная
  5. Как отличить систему по записи
  6. Условия и ограничения
  7. Частые ошибки
  8. Короткий вывод

Система счисления — это набор знаков и правил, по которым числа записывают и читают. Одно и то же количество можно записать по-разному: как 42, как XLII или как 101010₂, и это будет одно число, только в разных системах. Статья для школьников и всех, кто начинает с основ информатики: вы разберётесь, чем позиционные системы отличаются от непозиционных, что такое основание, и научитесь определять систему по записи.

Все расчёты в тексте пересчитаны программой на Python 3.13, а правила записи чисел в самом языке сверены с его документацией (ссылки в источниках). Системы счисления встречаются повсюду: римские цифры на циферблате, десятичные числа в магазине, двоичный код внутри компьютера. К концу статьи вы сможете прочитать запись вроде XVIII, 101₂ или 0x1A, назвать её систему и объяснить, почему компьютер считает не так, как человек. Для этого не нужны ни формулы выше школьной программы, ни опыт программирования: код в статье короткий, его можно просто прочитать. Перевод чисел между системами здесь не разбирается, ему посвящена отдельная инструкция.

Число и цифра

Путаница начинается с трёх слов: цифра, число и система.

Знаков мало, чисел бесконечно много. В десятичной системе всего десять цифр, а из них составляют любые числа: 7, 42, 2026. Правила записи определяют, как из цифр получить число и как его прочитать.

Непозиционные системы

В непозиционной системе значение знака не зависит от того, где он стоит. Самая простая такая система — унарная: каждое число записывают столькими палочками, сколько в нём единиц. Тройка выглядит как |||. Удобно считать пальцы и дни, но число 2026 в такой записи не уместить.

Вторая известная непозиционная система — римская. В ней семь знаков:

ЗнакIVXLCDM
Значение1510501005001000

Правила записи такие. Знаки одной величины повторяют не больше трёх раз подряд: XXX — тридцать. Если меньший знак стоит перед большим, его вычитают: IV — четыре, IX — девять, XL — сорок. Если после большого, прибавляют: VI — шесть, XVIII — восемнадцать.

Проверим правила программой. Функция to_roman собирает запись, жадно вычитая самые крупные значения, а from_roman читает её обратно:

Python
ZNAKI = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"),
         (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")]

def to_roman(n):
    result = ""
    for value, sign in ZNAKI:
        while n >= value:
            result += sign
            n -= value
    return result

def from_roman(s):
    values = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    total = 0
    for i, ch in enumerate(s):
        if i + 1 < len(s) and values[ch] < values[s[i + 1]]:
            total -= values[ch]
        else:
            total += values[ch]
    return total

print(to_roman(18), to_roman(24), to_roman(42))
print(from_roman("MCMXCIV"), to_roman(2026))
print(from_roman("XVIII") + from_roman("XXIV"), to_roman(42))

Вывод программы:

Текст
XVIII XXIV XLII
1994 MMXXVI
42 XLII

Функция from_roman лишь читает запись и не проверяет, правильно ли она составлена: строка IIII она тоже примет.

Позиционные системы

В позиционной системе значение цифры зависит от её места. В числе 345 цифра 3 стоит на третьем месте справа и означает три сотни, а в 435 она стоит на первом и означает три единицы.

Количество разных цифр системы называют основанием и обозначают pp. Числа в такой системе раскладываются по формуле:

Ap=∑i=0n−1ai pi=an−1pn−1+⋯+a1p+a0A_p = \sum_{i=0}^{n-1} a_i \, p^i = a_{n-1} p^{n-1} + \dots + a_1 p + a_0

Здесь aia_i — цифры числа, а позиции считают справа налево, начиная с нуля. Для десятичного числа 345 основание равно 10:

34510=3⋅102+4⋅10+5=345345_{10} = 3\cdot 10^2 + 4\cdot 10 + 5 = 345

Та же формула работает для любого основания. Двоичное число 1012101_2 при p=2p = 2 раскладывается так:

1012=1⋅22+0⋅2+1=5101_2 = 1\cdot 2^2 + 0\cdot 2 + 1 = 5

Оба разложения проверены в Python: 3*10**2 + 4*10 + 5 даёт 345, а int("101", 2) даёт 5.

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

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

СистемаОснованиеЦифрыГде применяется
Десятичная100–9повседневные расчёты
Двоичная20 и 1внутри компьютера, логика
Восьмеричная80–7краткая запись двоичных чисел
Шестнадцатеричная160–9 и A–Fцвета, адреса памяти, коды символов

Компьютеру подходит двоичная система: у электронного элемента удобно различать два состояния, «есть сигнал» и «нет сигнала». Подробнее об этом написано в отдельной статье про двоичную систему. Восьмеричная и шестнадцатеричная нужны человеку: они записывают длинные двоичные числа коротко. А если нужно перевести число из одной системы в другую, пригодится инструмент на сайте. Для двоичной логики есть таблица истинности.

Как отличить систему по записи

В тетради основание пишут внизу справа: 10210_2, 10810_8, 101010_{10}, 101610_{16}. В языках программирования для этого есть префиксы. В Python двоичные числа начинаются с 0b, восьмеричные с 0o, шестнадцатеричные с 0x, а буквы A–F в шестнадцатеричной записи можно писать в любом регистре. Это следует из документации языка.

Python
print(0b101, 0xFF, 0o17, 0x1A)
print(int("10", 2), int("10", 8), int("10", 16))
print(bin(10))
Текст
5 255 15 26
2 8 16
0b1010

Здесь запись 10 в разных системах означает 2, 8 и 16, а функция bin возвращает двоичную запись числа с префиксом 0b.

Условия и ограничения

Версия
Python 3.13 — примеры кода запущены на Python 3.13. Правила записи чисел в этой статье от версии языка не зависят.
Область
Целые неотрицательные числа — в статье разобраны только они. Дробные и отрицательные числа в других системах записывают по дополнительным правилам.
Римская запись
Числа до 3999 — правило «не больше трёх одинаковых знаков подряд» выполняется для чисел 1–3999; для больших функция to_roman выдаст больше трёх M подряд.
Проверка
from_roman не проверяет запись — функция читает правильные записи, но не отвергает ошибочные вроде IIII.
Экзамены
Состав проверяемых тем меняется — перечень элементов в кодификаторе ФИПИ обновляется; сверяйтесь с документом текущего года.

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

  • Путают 10₂ и 10: двоичное «10» равно двум, а не десяти.
  • Считают позиции слева направо. В формуле разложения позиции нумеруют справа налево, начиная с нуля.
  • Читают римскую запись «в столбик», как позиционную: IV — это не 1 и 5, а 5 минус 1.
  • Записывают в римской системе четыре одинаковых знака подряд: правильно IV, а не IIII.
  • Думают, что основание — число в записи, а не количество цифр системы.
  • Забывают, что в шестнадцатеричной системе буквы A–F — полноценные цифры, а не обозначения неизвестных.

Короткий вывод

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

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

Источники

  1. Python Documentation: Lexical analysis — Integer literals↗ docs.python.org
  2. Python Documentation: Built-in Functions — bin()↗ docs.python.org
  3. ФИПИ: демоверсии, спецификации, кодификаторы ЕГЭ и ОГЭ↗ fipi.ru

Частые вопросы

Чем позиционная система счисления отличается от непозиционной?

В позиционной системе значение цифры зависит от её места в записи, а в непозиционной — только от самого знака. В записи 345 цифра 3 означает три сотни, а в числе 435 она означает три единицы. В римской записи знак X всегда равен десяти, где бы он ни стоял. Поэтому позиционные системы удобнее для вычислений, а непозиционные подходят для нумерации.

Что такое основание системы счисления?

Основание — это количество различных цифр позиционной системы и одновременно число, во сколько раз значение цифры растёт при сдвиге на одну позицию влево. В десятичной системе основание 10, в двоичной 2, в восьмеричной 8, в шестнадцатеричной 16. Основание записывают внизу справа: 101₂ — двоичное число, а 101₁₀ — сто один.

Сколько цифр в шестнадцатеричной системе счисления?

Шестнадцать: десять обычных цифр от 0 до 9 и шесть букв от A до F, которые обозначают значения от 10 до 15. Python принимает буквы в любом регистре, поэтому 0xFF и 0xff — одно и то же число 255. Шестнадцатеричная запись компактна: одна её цифра заменяет четыре двоичных.

Почему римская система счисления считается непозиционной?

Потому что значение знака в ней не зависит от места: V всегда пять, X всегда десять, M всегда тысяча. Позиция влияет лишь на то, прибавляется знак или вычитается (IV — четыре, VI — шесть). Римские цифры в России встречаются на циферблатах часов, в нумерации веков, томов и глав, но считать в такой записи неудобно: числа приходится переводить в десятичные.

Что нужно знать о системах счисления для ЕГЭ и ОГЭ по информатике?

Ориентируйтесь на кодификатор, который ФИПИ публикует на странице демоверсий, спецификаций и кодификаторов. Список проверяемых элементов обновляется, поэтому сверяйте его с документом текущего года. Эта статья даёт основу: что такое система счисления и основание, как отличить систему по записи. Перевод чисел с решением по шагам разобран в отдельной статье.

РедакцияМатериал подготовлен по источникам выше · 9 января 2026