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

. Двоичная, десятичная и другие
Обновлено 21 марта 2025, 10:06
Nomad Pixel / Shutterstock / FOTODOM
Фото: Nomad Pixel / Shutterstock / FOTODOM

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

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

Система счисления — это метод представления чисел с помощью определенных знаков и правил их записи. Она позволяет удобно обозначать количества, выполнять расчеты и хранить информацию в различной форме [1].

Каждая система имеет свое основание, которое определяет, сколько символов в ней используют. Например, в десятичной системе применяют десять цифр — от 0 до 9, а в двоичной всего две — 0 и 1. Хотя в быту мы в основном используем десятичную систему, в других областях востребованы иные способы записи чисел.

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

История систем счисления

Одними из первых и простых методов подсчета и записи чисел были зарубки, узелки и камни. Примером такого метода является кость Ишанго возрастом более 20 тыс. лет, найденная в Африке [2]. На ней высечены отметки, свидетельствующие о примитивных вычислениях.

Позже, по мере накопления знаний, появились системы записи чисел с использованием символов. Шумерская и вавилонская системы (около 3100 г. до н.э.) основывались на шестидесятеричной системе (основание 60). Именно благодаря ей в современном мире сохранились 60 секунд в минуте и 360 градусов в окружности [3]. Египетская система использовала десятичный принцип: для обозначения чисел применялись иероглифы — например, спиральная веревка означала 100, лотос — 1000 и так далее [3]. Майя разработали двадцатиричную систему.

Греки пользовались аттической системой, позже эволюционировавшей в ионическую — в ней числа обозначали буквами алфавита. Римляне разработали собственную систему, в которой числа записывали с помощью комбинации букв: I — 1, V — 5, X — 10 и т.д. Несмотря на широкое использование, римские цифры были неудобны для сложных расчетов, так как не имели разрядности и символа для нуля.

Настоящим прорывом стала десятичная позиционная система с нулем, созданная индийскими математиками (0–9) [3]. Ее основное преимущество — позиционность: значение цифры зависит от ее места в числе. Например, в числе 202 цифра 2 имеет разные значения в зависимости от своей позиции. Это позволило записывать любые числа с помощью ограниченного набора символов, используя принцип места.

Десятичная система показала огромные преимущества и стала «совершенной системой счисления» своего времени [3], [4]. Именно благодаря ей сложение, вычитание и другие операции стали проще, чем когда-либо.

Позиционные системы счисления

Позиционные системы позволяют записывать большие числа коротко и выполнять вычисления гораздо проще. Значение каждой цифры определяет не только символ, но и его положение. В таких системах используют понятие основания, которое указывает, сколько различных цифр применяется. Например, если основание равно 10, это означает, что числа записывают с использованием десяти символов — от 0 до 9. Так, в числе 202 позиционная система понимает первые «2» как двести (две сотни), а последнюю «2» — как две единицы [5], [6].

Двоичная

Двоичная система счисления основана на использовании всего двух цифр — 0 и 1 [7]. Она широко применяется в вычислительной технике, так как легко передается через электронные сигналы, где 0 соответствует отсутствию тока, а 1 — его наличию.

Несмотря на ограниченное количество символов, эта система позволяет представлять любые числа, используя больше разрядов. Например, число 6 в двоичном формате записывается как 110 [8].

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

Восьмеричная

Восьмеричная (основание 8, цифры 0–7) раньше использовалась в программировании для сокращения записи двоичных чисел. Каждой восьмеричной цифре соответствует строго три двоичные цифры. В программировании восьмеричная система широко применялась в середине XX века, особенно на этапах, когда удобство представления двоичных кодов было важно, а шестнадцатеричная система еще не стала стандартом [9]. Программисты могли записывать машинные коды и адреса в восьмеричном виде, что сокращало длину записи (по сравнению с двоичной) втрое.

Однако со временем восьмеричную систему почти полностью вытеснила более мощная шестнадцатеричная. Сегодня восьмеричная система используется довольно ограниченно. Классический пример — права доступа в UNIX/Linux [10]. В этих операционных системах права файла (чтение/запись/выполнение для владельца, группы, остальных) кодируются трехзначным восьмеричным числом от 000 до 777.

Десятичная

Десятичная (основание 10, цифры 0–9) — наиболее распространенная система, удобная для повседневных расчетов. Десятичная система настолько укоренилась, что часто воспринимается как единственно возможный способ записи чисел [9], [11].

Стоит отметить, что десятичная система используется не только для целых, но и для дробных чисел — с разделителем (запятой или точкой) для отделения дробной части. Единицы дробных разрядов — десятые, сотые, тысячные доли и т.д. Именно в десятичной системе ведется большинство измерений и расчетов. Распространенность десятичной системы практически абсолютная: ее учат с детства во всех странах, ею пользуются в торговле и повседневных расчетах. Лишь в специальных приложениях (например, программирование) могут применяться другие системы счисления, но результат для пользователя все равно обычно переводится в десятичный формат.

Шестнадцатеричная

Шестнадцатеричная система счисления (гексадецимальная) имеет основание 16. Она расширяет десятичный набор цифр за счет букв: используют 16 символов — 0–9 для чисел от нуля до девяти и A, B, C, D, E, F для чисел от десяти до пятнадцати.

Шестнадцатеричная система практически не встречается в быту, но широко применяется в информатике. Ее основное преимущество — компактность записи двоичных данных. Каждая шестнадцатеричная цифра эквивалентна последовательности из четырех двоичных бит [9], [12]. Благодаря этому любое двоичное число можно записать в четыре раза короче в шестнадцатеричном формате.

Например, двоичный байт 11111111₂ в шестнадцатеричной системе записывается как короткое FF₁₆. В современном программировании шестнадцатеричные числа используются повсеместно: например, цвета в HTML/CSS кодируются как #RRGGBB, где каждая компонента цвета — двузначное шестнадцатеричное число от 00 до FF. Так, код #FFDD00 обозначает ярко-желтый цвет, где FF₁₆ = 255 — максимальная интенсивность красного, DD₁₆ = 221 — немного пониженная интенсивность зеленого, а 00 — отсутствие синего [13].

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

Непозиционные системы, такие как римские цифры, не изменяют значения символов в зависимости от их места в числе. Это делает их неудобными для вычислений. Каждая цифра всегда означает одну и ту же величину, и числа образуются комбинированием таких знаков по определенным правилам [9], [14].

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

Единичная

Единичная (унарная) — самая простая система, где число представляется повторением одного знака, например пять палочек для числа 5. Чтобы представить число, этот знак просто повторяют нужное количество раз. Унарная система, по сути, равна счету конкретными предметами. Ее применяли первобытные люди, делая насечки на кости или палочке. Практического использования для больших чисел у такой системы нет. Длина записи растет линейно от значения числа, и уже число в несколько сотен в унарной системе выглядело бы как длинная строка из сотен символов.

Римская

Римская — самая известная непозиционная система, дошедшая до наших дней. Она была разработана в Древнем Риме и использует вместо привычных нам арабских цифр специальные символы-буквы: I (1), V (5), X (10), L (50), C (100), D (500) и M (1000). Основные правила образования римских чисел следующие: если более крупный символ стоит перед меньшим или равным, их значения складывают, если меньший стоит перед большим — вычитают. Например, III = 3 (три единицы суммируются), XV = 15 (10 + 5), а IV = 4 (5 – 1, поскольку I перед V означает вычитание единицы из пяти). Повторяться подряд могут не более трех одинаковых символов, поэтому для 4 пишут IV (а не IIII), для 9 — IX и аналогично вводятся комбинации XL = 40, XC = 90, CD = 400, CM = 900 [4], [9]. Римляне не имели нуля и не пользовались разрядами; их система была достаточно эффективна для записи дат, порядковых номеров, но не очень удобна для сложения или умножения больших чисел.

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

Системы счисления в информатике

Компьютеры и цифровые устройства оперируют данными в двоичной форме, поэтому в информатике особенно важны системы счисления с основанием, являющимся степенью двойки, то есть 2, 8, 16. Базовая система внутри любого компьютера двоичная: все числа хранятся как последовательности битов (0 или 1). На уровне электронных схем 0 и 1 кодируют разные состояния (например, низкое или высокое напряжение). Поэтому весь машинный код, адреса памяти, результаты вычислений изначально двоичные [15].

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

Восьмеричная система в информатике исторически применялась раньше, когда компьютерные «слова» имели длину, кратную 3 битам и группировка по три бита (то есть восьмеричная запись) была естественной.

Десятичная система тоже имеет место в информатике. Во-первых, исходные данные и результаты вычислений обычно вводятся и выводятся для пользователя в десятичном виде, привычном людям. Во-вторых, существуют области вычислений (финансовые расчеты, бухгалтерия), где критично работать именно с десятичными дробями, чтобы избегать ошибок округления двоичного представления. Для этого применяют специальные десятичные форматы или библиотеки (например, BCD — двоично-десятичный код, хранящий десятичные цифры).

В языке программирования число по умолчанию считается десятичным литералом, если не указано иное. Таким образом, программист постоянно имеет дело с разными системами счисления: двоичной (биты, маски, сдвиги), шестнадцатеричной (отладка, литералы 0x, цвета, Unicode и прочее), реже восьмеричной (наследие Unix), но конечный пользователь чаще всего видит числа в удобной десятичной форме.

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

Существует несколько методов перевода чисел из одной системы счисления в другую. Наиболее распространенные алгоритмы позволяют переводить числа сначала в десятичную систему, а затем в любую другую. Однако есть и методы прямого преобразования между произвольными основаниями [15].

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

Пример 1. Переведем число 1011₂ (в двоичной системе) в десятичную:

1 × 2 ^ 3 + 0 × 2 ^ 2 + 1 × 2 ^ 1 + 1 × 2 ^ 0 = 1 × 8 + 0 × 4 + 1 × 2 + 1 × 1 = 8 + 0 + 2 + 1 = 11₁₀

Пример 2: Переведем число 231₄ (из четверичной системы) в десятичную:

2 × 4 ^ 2 + 3 × 4 ^ 1 + 1 × 4 ^ 0 = 2 × 16 + 3 × 4 + 1 × 1 = 32 + 12 + 1 = 45₁₀

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

Пример 3. Переведем 25₁₀ в двоичную систему (основание 2):

  1. 25 ÷ 2 = 12, остаток 1
  2. 12 ÷ 2 = 6, остаток 0
  3. 6 ÷ 2 = 3, остаток 0
  4. 3 ÷ 2 = 1, остаток 1
  5. 1 ÷ 2 = 0, остаток 1

Записываем остатки в обратном порядке: 25₁₀ = 11001₂.

Пример 4. Переведем 125₁₀ в восьмеричную систему (основание 8):

  1. 125 ÷ 8 = 15, остаток 5
  2. 15 ÷ 8 = 1, остаток 7
  3. 1 ÷ 8 = 0, остаток 1

Читаем остатки снизу вверх: 125₁₀ = 175₈.

Можно выполнить перевод числа сразу из одной системы в другую, минуя десятичную. Для этого часто применяют промежуточные представления через двоичную систему. Например, перевод 3A₁₆ (из шестнадцатеричной системы) в восьмеричную:

1. Разбираем шестнадцатеричное число на двоичные блоки:

  • 3₁₆ = 0011₂
  • A₁₆ = 1010₂
  • Получаем: 3A₁₆ = 00111010₂

2. Группируем двоичные цифры по три, начиная с конца:

  • 001 110 100

3. Переводим в восьмеричную систему:

  • 001₂ = 1₈
  • 110₂ = 6₈
  • 100₂ = 4₈

4. Получаем ответ: 3A₁₆ = 164₈.

Этот метод удобен для перевода между системами, где основание является степенью двух (например, 2, 8 и 16).

Поделиться
Авторы
Теги