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

__TOC__

История

Исторически первое изобретение позиционной нумерации, основанной на поместном значении цифр, приписывается шумерам и вавилонянам. Они использовали 60-ричную позиционную систему счисления.

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

Древнейшая известная запись позиционной десятичной системы обнаружена в Индии в 595 году. Индийская нумерация пришла сначала в арабские страны, затем и в Западную Европу. О ней рассказал среднеазиатский математик аль-Хорезми. Простые и удобные правила сложения и вычитания чисел, записанных в позиционной системе, сделали её особенно популярной. А поскольку труд аль-Хорезми был написан на арабском, то за индийской нумерацией в Европе закрепилось иное название — «арабская» (арабские цифры).

Определения

Позиционная система счисления определяется целым числом , называемым основанием системы счисления. Система счисления с основанием также называется -ичной (в частности, двоичной, троичной, десятичной и т.п.).

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

С помощью позиций в -ичной системе счисления можно записать целые числа в диапазоне от до , т.е. всего различных чисел.

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

В ненулевых числах начальные нули обычно опускаются.

Для записи чисел в системах счисления с основанием до 36 включительно в качестве цифр (знаков) используются арабские цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) и, затем, буквы латинского алфавита (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z). При этом, a = 10, b = 11 и т. д., иногда x = 10.

При одновременной работе с несколькими системами счисления для их различения основание системы обычно указывается в виде нижнего индекса, который записывается в десятичной системе:  — это число 123 в десятичной системе счисления;  — то же число в восьмеричной системе счисления;  — то же число, но в двоичной системе счисления;  — то же число, но в десятичной системе счисления с двоичным кодированием десятичных цифр (BCD);  — то же число, но в несимметричной троичной системе счисления;  — то же число, но в симметричной троичной системе счисления, знаки «i», «7», «2» и «−» обозначают «−1», знаки «1» и «+» обозначают «+1».

В некоторых специальных областях применяются особые правила указания основания. Например, в программировании шестнадцатеричная система обозначается: в ассемблере и записях общего рода, не привязанных к конкретному языку, буквой h (от hexadecimal) в конце числа (синтаксис Intel); в Turbo Basic'е двумя знаками «&H» в начале числа (от Hexadecimal); в Паскале знаком «$» в начале числа; в Си и многих других языках комбинацией 0x или 0X (от hexadecimal) в начале.

В Turbo Basic'е, по аналогии с «&H», для обозначения восьмеричных чисел используются префиксы «&O» (от Octal) или просто «&», а для обозначения двоичных чисел - префикс «&B» (от Binary). В некоторых диалектах языка Си по аналогии с «0x» используется префикс «0b» для обозначения двоичных чисел (обозначение «0b» не входит в стандарт ANSI C).

В русских счётах для записи чисел в десятичной показательной позиционной системе счисления применяется унарнодесятичная система записи (представления) десятичных цифр с одной избыточной унарнодесятичной цифрой «1111111111» = 10_10 на каждый разряд.

Примеры

2 — двоичная (в дискретной математике, информатике, программировании) 3 — троичная система счисления 4 — четверичная система счисления (в генетике для обозначения нуклеоидов и кодонов) 7 — семеричная (в музыке для обозначения названий нот) 8 — восьмеричная (в программировании) 10 — десятичная система счисления 12 — двенадцатеричная (широко использовалась в древности, в некоторых частных областях используется и сейчас) 16 — шестнадцатеричная (наиболее распространена в программировании, а также в шрифтах) 20 — двадцатеричная (использовалась у майя и ацтеков) 40 — сороковичная система счисления (применялась в древности: в частности, «сорок сороков» = 1600) 60 — шестидесятеричная (использовалась в древнем Вавилоне, а впоследствии древнегреческими астрономами для измерения угловых координат звёзд (долготы и широты) и для измерения времени). И сегодня используется в измерении времени суток.

Свойства Позиционная система счисления обладает рядом свойств:

Основание системы счисления в ней самой всегда записывается как 10; например, в двоичной системе счисления 10 означает число 2. Данное утверждение неприменимо к унарной системе счисления, в которой используется только одна цифра. Для записи числа x в b-ичной системе счисления требуется цифр, где означает взятие целой части числа. Сравнивать числа, записанные в позиционной системе счисления, можно поразрядно, предварительно дополнив их ведущими нулями до одинаковой длины. При этом сравнение идёт от старшего разряда к младшему до тех пор, пока цифра в одном числе не будет больше соответствующей цифры в другом. Например, для сравнения чисел 321 и 312 в десятичной системе счисления сравниваются цифры в одинаковых разрядах слева направо: 3 = 3 — результат сравнения чисел на данном шаге не определён; 2 > 1 — первое число больше (независимо от оставшихся цифр). Таким образом, естественный порядок на числах соответствует лексикографическому порядку на их записях в позиционной системе счисления при условии, что эти записи дополнены ведущими нулями до одинаковой длины. Арифметические операции над числами. Позиционная система счисления позволяет без труда выполнять сложение, вычитание, умножение, деление и деление с остатком чисел, зная только таблицу сложения однозначных чисел, а для трёх последних операций ещё и таблицу умножения в соответствующей системе (см., например, деление столбиком).

Экономичность

В цифровой технике система счисления с основанием реализуется регистрами, состоящими из наборов триггеров, каждый из которых может принимать различных состояний, кодирующих цифры числа. При этом особое значение приобретает экономичность системы счисления — возможность представления как можно большего количества чисел с использованием как можно меньшего общего количества знаков. Если количество триггеров равно , то общее количество знаков равно , а количество представимых ими чисел соответственно — . Как функция от , это выражение достигает максимума при равном числу e = 2,718281828…. При целых значениях максимум достигается для . Таким образом, наиболее экономичной является троичная система счисления (используемая в троичных ЭВМ), следом за которой идут двоичная система (традиционно используемая в большинстве распространённых ЭВМ) и четверичная.

Эквивалентное описание экономичности системы счисления можно получить, используя понятие информационной энтропии. При условии равновероятности появления каждой из цифр в записи числа информационная энтропия записи n-разрядного числа в системе счисления с основанием b принимает значение (с точностью до постоянного коэффициента). Поэтому плотность записи (то есть, количество информации на один разряд) чисел в системе счисления с основанием b равна , которая также принимает максимальное значение при b = e, а для целых значений b — при b = 3.

Переход к другому основанию

Перевод в десятичную систему счисления Если целое число в -ичной системе счисления равно

то для перевода в десятичную систему вычисляем следующую сумму:

или в виде схемы Горнера:

Например:

Аналогичные действия имеют место также для дробной части:

Перевод из десятичной системы счисления Целая часть Последовательно (итеративно) делить с остатком целую часть десятичного числа на основание, пока десятичное число (частное) не станет равно нулю. Полученные при делении остатки являются цифрами нужного числа. Число в новой системе записывают, начиная с последнего остатка.

Дробная часть Дробную часть десятичного числа умножаем на основание системы, в которую требуется перевести, и отделяем целую часть. Продолжаем умножать дробную часть на основание новой системы и отделять целую часть, пока число не станет равным 0 точно. Цифры дробной части в новой системе счисления — это целые части, полученные в первом шаге, которые, убывая по старшинству с самого старшего разряда дробной части, идут в порядке, в каком были они и были получены. Примечание. Иногда при переводе дробного рационального числа из десятичной системы по таким алгоритмам может получиться бесконечная периодическая дробь: например, . Чтобы обнаружить период, нужно провести итерации, описанные в первом пункте, и понять, не встретится ли та же дробная часть, что и была несколько итераций назад. (О периодических дробях в разных системах счисления написано ниже.) Примеры переведём в двоичную систему: 44 делим на 2. частное 22, остаток 0 22 делим на 2. частное 11, остаток 0 11 делим на 2. частное 5, остаток 1 5 делим на 2. частное 2, остаток 1 2 делим на 2. частное 1, остаток 0 1 делим на 2. частное 0, остаток 1 Частное равно нулю — деление закончено. Теперь, записав все остатки снизу вверх, получим число

Для дробной части алгоритм выглядит так: 0,625 умножаем на 2. Дробная часть 0,250. Целая часть 1. 0,250 умножаем на 2. Дробная часть 0,500. Целая часть 0. 0,500 умножаем на 2. Дробная часть 0,000. Целая часть 1. Таким образом,

Перевод из двоичной в восьмеричную и шестнадцатеричную системы Для этого типа операций существует упрощённый алгоритм.

Целая часть Для восьмеричной — разбиваем переводимое число на количество цифр, равное степени 2 (2 возводится в ту степень, которая требуется, чтобы получить основание системы, в которую требуется перевести (2³=8), в данном случае 3, то есть триад). Преобразуем триады по таблице триад: 000 — 0; 100 — 4; 001 — 1; 101 — 5; 010 — 2; 110 — 6; 011 — 3; 111 — 7.

Для шестнадцатеричной — разбиваем переводимое число на количество цифр, равное степени 2 (2 возводится в ту степень, которая требуется, чтобы получить основание системы, в которую требуется перевести (24=16), в данном случае 4, то есть тетрад). Преобразуем тетрады по таблице тетрад: 0000 — 0; 0100 — 4; 1000 — 8; 1100 — C; 0001 — 1; 0101 — 5; 1001 — 9; 1101 — D; 0010 — 2; 0110 — 6; 1010 — A; 1110 — E; 0011 — 3; 0111 — 7; 1011 — B; 1111 — F.

Пример: преобразуем 1011002 восьмеричная — 101 100 → 548 шестнадцатеричная — 0010 1100 → 2C16

Дробная часть Перевод дробной части из двоичной системы счисления в системы счисления с основаниями 8 и 16 осуществляется точно так же, как и для целых частей числа, за тем лишь исключением, что разбивка на октавы и тетрады идёт вправо от десятичной запятой, недостающие разряды дополняются нулями справа. Например, рассмотренное выше число 1100,0112 будет выглядеть как 14,38 или C,616.

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

Для восьмеричной — преобразуем по таблице в триплеты: 0 000 4 100 1 001 5 101 2 010 6 110 3 011 7 111

Для шестнадцатеричной — преобразуем по таблице в квартеты: