Перейти к содержимому

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

Позиционная система счисления — способ записи чисел, при котором вклад цифры зависит от её места в записи: каждая позиция имеет вес, равный степени основания. Десятичная, двоичная и шестнадцатеричная записи позиционны, римская — нет.

Позиционность — свойство записи, а не числа

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

Формально запись an…a1a0 в системе с основанием b означает сумму ai·bi. Вес каждой позиции — степень основания, растущая справа налево. Дробная часть продолжает тот же ряд в отрицательные степени: разряды после запятой весят b−1, b−2 и так далее.

Противоположность — непозиционные системы, где символ несёт постоянное значение независимо от места. Римская запись аддитивна: X всегда десять, и в записи XXX, и в MX. Правило вычитания в IX не делает систему позиционной — вес символа не связан со степенью основания, меняется лишь знак вклада по соседству. Именно поэтому в римской записи не существует столбикового сложения и деления: алгоритмы школьной арифметики опираются ровно на позиционность.

Разграничение с соседним понятием стоит держать в голове с самого начала. Позиционность — качественное свойство принципа записи, ответ на вопрос «зависит ли вклад цифры от места». Основание системы счисления — конкретное число, задающее размер алфавита цифр и шаг между весами разрядов. Позиционных систем бесконечно много, и различаются они как раз основаниями: двоичная, восьмеричная, десятичная, шестнадцатеричная — всё это одна и та же идея с разными значениями b.

Развёрнутая запись и роль нуля

Развёрнутая форма делает механику наглядной. Число 2026 в десятичной системе — это 2·103 + 0·102 + 2·101 + 6·100. То же число в шестнадцатеричной записывается как 7EA: 7·256 + 14·16 + 10. Символов стало меньше, величина осталась прежней.

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

Второе следствие позиционности — компактность. Количество разрядов, нужное для записи числа N в системе с основанием b, равно ⌈logb(N + 1)⌉. Растёт оно логарифмически, а не линейно: чтобы записать миллион, хватает семи десятичных цифр или двадцати двоичных. В непозиционных системах такой экономии нет — унарная запись «палочками» требует ровно N символов, а римская для больших чисел вынуждена вводить всё новые буквы и надчёркивания.

Почему техника опирается на позиционные системы

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

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

Позиционностью пользуются и упаковщики данных. Цифровой режим QR-кода кодирует не по одной цифре: тройка десятичных цифр — это число от 0 до 999, которое помещается в десять бит, поскольку 1000 меньше 1024. Экономия по сравнению с побайтовой записью — около 58%, и достигается она чтением тройки как позиционного числа с основанием 10. Тот же приём работает в буквенно-цифровом режиме, где пара символов из алфавита в 45 знаков укладывается в одиннадцать бит. Детали упаковки разобраны в термине цифровой режим QR, а её влияние на объём данных — в термине ёмкость QR-кода.

Числовые идентификаторы: запись позиционна, смысл — нет

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

Существуют и смешанные системы счисления, где вес разряда не является степенью одного основания. Время — классический пример: секунды набираются до 60, минуты до 60, часы до 24. Календарная дата устроена сложнее из-за неравной длины месяцев и високосных лет. Такие системы остаются позиционными в широком смысле — вклад разряда зависит от места, — но арифметика в них требует индивидуального правила переноса для каждой позиции, из-за чего расчёты дат и интервалов остаются устойчивым источником ошибок в программах.

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

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

В позиционной вклад цифры равен её значению, умноженному на вес разряда, то есть на степень основания: в 505 левая пятёрка означает 500, правая — 5. В непозиционной символ несёт постоянную величину независимо от места: римская X всегда равна десяти. Практическое следствие — в непозиционной записи невозможны столбиковые алгоритмы сложения и деления, которыми пользуется вся вычислительная техника.

Зачем позиционной системе нужен ноль?

Чтобы обозначить пустой разряд и сделать запись однозначной. Без символа для пустоты записи 12 и 102 неразличимы, а значение приходится угадывать по контексту — с этим ограничением жила вавилонская шестидесятеричная система. Ноль превращает позиционную запись в самодостаточную: длина строки прямо задаёт набор весов, и число читается без внешних подсказок.

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

Система, где веса разрядов не являются степенями одного числа. Время задано основаниями 60, 60 и 24, старая британская денежная система работала на 12 и 20, факториальная система использует веса 1, 2, 6, 24 и далее. Записи остаются позиционными, но перенос из разряда в разряд подчиняется собственному правилу на каждой позиции, поэтому универсальная арифметика к ним неприменима.

Бывают ли системы с отрицательным или дробным основанием?

Да, и они изучены. В негадвоичной системе с основанием −2 отрицательные числа записываются без отдельного знака, потому что чётные степени положительны, а нечётные отрицательны. Существует и система с основанием, равным золотому сечению. Практического применения такие конструкции почти не нашли: выигрыш в одном свойстве оборачивается усложнением сложения, сравнения и аппаратной реализации.

Позиционна ли запись штрих-кода или артикула?

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