Кроме известной нам всем со школы десятичной записи величин, существуют и многие другие. Люди знакомые с интернетом, информатикой и администрированием сетей наверняка знают, что существует также двоичная, восьмеричная и шестнадцатеричная. И даже представляют, как делать операции с величинами, записанными с помощью других способов. Следует отличать, что существуют также различные альтернативные, непозиционные способы записи величин и выполнения арифметических операций с ними. В статье речь пойдет о том, чем отличаются позиционные системы счисления от непозиционных.
Содержание
Системы счисления
Система счисления — способ представления величин (обычно целых положительных) при помощи последовательности специальных символов, цифр. Каждая из них может быть позиционной, непозиционной или смешанной. Для каждого способа исчисления разработаны свои способы выполнения операций над величинами, которые наиболее удобны именно в ней. Например, для шестнадцатеричной существует простая возможность перевода в двоичную. Под каждый символ шестнадцатеричного числа выделяется четыре символа в двоичной записи и они заполняются в соответствии со значением символа в шестнадцатеричной записи — последовательности символов, определяющих величину.
Что такое позиционная система?
Позиционная предполагает, что каждый символ в числе находится на определённом месте, и в зависимости от того, на каком месте он находится, может означать разную величину, складывающую данное число. Например, число 102 в десятичной позиционной записи имеет символ 1, которая добавляет к данному значению 100, так как стоит на третьем месте, считая справа. В числе 12 тот же символ 1 будет добавлять только 10, так как стоит на втором месте справа. В основном чтение величины происходит справа налево.
Количество символов в позиционной записи зависит от её основания. Для десятичной записи основание число 10 и количество цифр десять: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Для двоичной только две: 0 и 1, оба символа являются цифрами. Для шестнадцатеричной их шестнадцать: к привычным цифрам от 0 до 9 добавляют ещё A, B, C, D, E, F, которые соответствуют значениям от 10 до 15.
Что такое непозиционная система?
Непозиционная система — такая, в которой цифра может означать одинаковую часть в сумме итогового числа, находясь на разных участках в записи. Самый простой пример — римские числа. Например, число MCMLXXVII означает 1977 в десятичной системе. Здесь цифры M, X и I встречаются на разных участках, но не различаются и имеют одно и то же значение в сумме итогового числа, 1 000, 10 и 1 соответственно.
Отличия
Главное, в чем отличие позиционной системы счисления от непозиционной — это правило, по которому производится определение величины. В позиционной записи правило записывается в виде конечной суммы двух множителей, один из которых — цифра числа, второй — это величина, зависящая от основания системы счисления и её типа. Например, для десятичной записи второй множитель равен 10k. В непозиционной записи это правило может иметь более сложный вид, например, в римской значение цифры зависит, где оно расположено, будет ли оно со знаком «+» или со знаком «-».
Достоинства позиционной системы
Основное преимущество — это удобство количественной оценки числа при первом взгляде на него. Видя количество цифр в целом числе, можно примерно представить его величину, будет ли оно больше ста миллионов или меньше десяти. Второе удобство — это простота выполнения арифметических операций в позиционных системах. Счёт выполняется справа налево и без использования рекурсивных правил.
Такое выполнение счёта и операций позволяет использовать по максимуму вычислительные возможности ЭВМ. Мы живём в цифровой век, и выполнение операций с числами на максимальной скорости жизненно важно для человека. Особенно если это низкоуровневые вычисления, которые используются много раз в программе. В то же время любые рекурсивные правила, которые часто бывают необходимы для непозиционных систем, вызывают непредсказуемость в определении машинного времени для вычисления.
Перевод из одной системы счисления в другую
Рассмотрим перевод из римской системы счисления в десятичную на примере взятого ранее числа: MCMLXXVII. Для того чтобы привести его в десятичную, необходимо добавлять к числу цифры, следуя справа налево. Если встречаются цифры, которые меньше предыдущей, то они последовательно вычитаются из полученного ранее значения до тех пор, пока не встретится в порядке числа цифра, которая различается тем, что больше предыдущей. В этом случае они снова начинают прибавляться.
Итак: MCMLXXVII = 1+1+5+10+10+50+1000-100+1000 = 1977.
Как видим, перевод из римской системы в десятичную обошёлся без рекурсивных правил. А вот обратный перевод придётся делать с использованием рекурсии. Допустим, у нас есть римская запись, в которой есть, кроме рассмотренных ранее I, V, X, L, C, M, ещё цифра D = 500. Соответственно, имеем ряд цифр M, D, C, L, X, V, I. Далее, по правилам римской записи числа, допускается в качестве вычитаемого указывать цифру не далее чем на одну позиции за той, которая уменьшается. То есть можно записать «CM», но нельзя «XM». При этом к «пятёркам», цифрам D, L и V, можно только прибавлять, но не вычитать, и записывать левее для вычитания их тоже нельзя. После этого мы вычитаем последовательно из десятичного числа вначале M, если этого сделать нельзя — то CM, CCM и так далее, когда это будет сделать можно. После этого записываем получившееся значение и начинаем сначала. Повторяем всё раз за разом до тех пор, пока остаток не будет равен нулю.
Как видно, алгоритм достаточно сложный и требует большого объёма вычислений, не только символьных, но и арифметических. Если рассматривать сложение, вычитание, умножение и деление двух чисел в римском способе записи, а особенно достаточно больших, то для проведения таких операций потребуется в несколько раз больше времени, чем в позиционной системе.
А теперь для ощущения разницы и контраста — как просто и легко переводить из одной позиционной системы счисления в другую. Например, из шестнадцатеричной в двоичную.
У нас есть число d0090 в шестнадцатеричной записи. В двоичной каждому разряду шестнадцатеричного числа соответствует четыре разряда. То есть число d0090 можно записать как xxxx.xxxx.xxxx.xxxx.xxxx, где на месте каждого x будет либо 0, либо 1. Теперь записываем всё число соответственно: 1101.0000.0000.0101.0000, или 11010000000001010000. Здесь можно пользоваться только символьными вычислениями, подставляя готовое соответствие каждой цифры шестнадцатеричной системы в двоичной, например, здесь были подставлены цифра «9» в шестнадцатеричной, 1010, и цифра d в шестнадцатеричной, 1101. Никаких арифметических действий не потребовалось. Так можно делать, если основание одной системы исчисления является целой степенью другой.
Видео по теме
В видео ниже можно увидеть, что такое позиционные системы счисления и непозиционные.
Выводы
Непозиционные системы счисления есть смысл использовать в некоторых специфических областях. Ранее они использовались для счёта, но изобретённая арабско-индийская система оказалась намного практичнее. В нынешний век цифровых технологий наряду с десятичной позиционной системой широко используются те, основание которой является степенью двойки.