Мысль о том, что изображение символа может нести смысл того, что этот символ обозначает, выглядит естественной. Но с развитием человеческой цивилизации уровень абстракции возрастает, и мы оперируем не кажущимися «естественными» обозначениями, а абстрактными, которые можно назвать кодами. Но если изображение дома или автомобиля еще можно изображать в виде пиктограммы, то не всегда понятно, как изображать абстрактные понятия, например, совесть. Но вернемся к другому абстрактному понятию - понятию «количества», которое выражается числами.
Простейшей идеей обозначения числа, в графики которого есть соответствующее отражение количества, это, например, набор «чисел» из палочек: «один» - |, «два» - ||, «три» - ||| и т.д. Кажется, что такая система исключительно неудобна, поскольку числа, превышающие семерку, уже не воспринимаются количественно и плохо прописываются. Тем не менее, теоретическая полезность такой записи чисел в том, что она близка к «природе». В природе нет сложений и вычитаний, умножений и делений. Все это - игра ума. Для такой «палочной» нотации, сложение двух чисел будет ни чем иным, как их конкатенацией: || + ||| = ||||| и все.
Чтобы избежать длинной записи чисел, человечество придумало позиционную систему счисления. Суть ее в том, что выражающие идею количества числа кодируются специальным алфавитом, называемым цифрами. Общепринятое в мире графическое написание этих цифр соответствует арабской нотации. Что также соответствует десятичной системе счисления, ведущей свое происхождение от десяти пальцев на руках. Считается, что раньше счет велся на пальцах, поэтому десятичная система появилась повсеместно. Однако в последнее время в информатике используется двоичная и восьмеричная системы счисления, а также расширенная нотация для записи шестнадцатеричных цифр, которая включает помимо арабских цифр и первые шесть прописных букв латинского алфавита.
Суть кодировки последовательности чисел банальна и логична. Для двоичной, восьмеричной, десятичной и шестнадцатеричной систем можно составить такую табличку:
2-я8-я10-я16-я11111022211333100444101555110666111777100010881001119910101210A10111311B11001412C11011513D11101614E11111715F1000201610100121171110102218121011231913110024201411012521151110262216111127231710000302418100013125191001032262010011332721
и т.д.
По поводу таблицы заметим, что чем длиннее алфавит, тем меньше знаков нужно для обозначения числа.
С точки зрения математики все системы счисления равносильны. Но с практической точки зрения двоичная система является самой экономной по количеству знаков в алфавите - их всего два. Это допустимый минимум для построения кода числа. Что касается десятичной системы, то мы к ней просто привыкли и подсознательно ассоциируем десятичные числа с выражаемым ими количеством. И здесь есть лексический нюанс: когда мы говорим «десять», то предполагаем десятичное число «десять». А как назвать число «10» в двоичной или иной не десятичной системы счисления? Иногда используют сочетание «двоичное десять», что означает двоичную запись «10», т.е. десятичное «2», а «шестнадцатеричная десять» означает шестнадцатеричную запись «10» с десятичным значением «16». Язык плохо адаптируется к этой ситуации. А в формальных обозначениях всегда можно написать, например, так: 102≡210, 1016≡1610≡208≡10002, где десятичные числа используются для обозначения системы счисления. А в языках программирования используются буквенные обозначения системы счисления.
Если говорить о «палочной» записи числа, то его сложность пропорциональна количеству, которое это число отражает. В то же время позиционная система счисления дает логарифмический рост знаков числа с ростом количества. Поэтому позиционная система получила абсолютное распространение. Для того, чтобы определить, сколько знаков L потребуется для кодировки числа N в n-й системе счисления, нужно взять десятичную запись числа N и посчитать выражение: L ≈ 1 + logn(N) = 1 + lg(N)/lg(n), где lg - десятичный логарифм, а целое L получается округлением до ближайшего целого в большую сторону.
Возможно ли создать другую систему кодировки чисел, которая бы росла медленнее, чем логарифм, т.е. была более экономной? Оказывается, нет. Даже инопланетяне, существование которых мы лишь предполагаем, пользуются аналогичной позиционной системой с логарифмическим ростом. Разумеется, если они разумные существа. Хотя наверняка и они задавались вопросом: а нет ли более эффективной системы кодировки количества?
Продолжение планируется