Кто — кого? — страница 17 из 52

Однако существуют и другие способы представления чисел, другие системы счисления. Так, например, любое целое число можно записать с помощью одного-единственного знака — 1 (единицы). Для этого символ единицы надо повторить столько раз, сколько в этом числе содержится единиц. Сложение при этом сводится к простому приписыванию единиц, а вычитание — к их вычеркиванию.

Идея, лежащая в основе такой системы «зарубок», крайне проста. Однако для записи больших чисел она слишком громоздка. Поэтому пользовались этой системой только народы, счет которых простирался не дальше одного-двух десятков.

Но вот появились автоматы, и конструкторы этих автоматов вспомнили, что число можно записать набором совершенно одинаковых сигналов. Их очень легко воспроизвести, и их легко «поймет» автомат. Такой способ записи программы работы в виде цепочки одинаковых символов назвали унитарным кодом, и теперь его широко применяют в автоматах.

Можно представить себе систему счисления, прямо противоположную системе зарубок, а именно такую, в которой каждому числу соответствует новый символ. При этом числа 10, 11, 12 и другие должны изображаться различными неповторяющимися значками. В такой системе для представления любого числа потребовался бы всего один значок, один символ, зато общее число этих символов было бы бесконечно велико.

Итак, пользуясь системой зарубок, надо помнить и понимать лишь один символ (это удобно и человеку и автомату!), но для записи большого числа требуется много места (всегда неудобно человеку и часто неудобно автомату!).

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

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

Можно ли заставить автомат «помнить» и «понимать» нашу обычную десятичную систему счисления?

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

Какой язык наиболее удобен автомату?

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

Самой простой, как уже говорилось, является система зарубок. Однако известен и существенный недостаток этой системы — ее громоздкость. В азбуке Морзе используется три вида сигналов — точка, тире и пауза. Когда текст передается вручную, такой троичный код очень удобен. Операторов, работающих на двух концах линии, нетрудно научить воспроизводить сигналы различной длительности и различать их.

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

— комбинацией поворотов стрелки вправо и влево, как сделали Вебер и Гаусс;

— в виде пробитых и непробитых участков на бумажной ленте;

— в виде белых и черных черточек на киноленте;

— в виде намагниченных и ненамагниченных участков на магнитной ленте;

— при помощи реле, замыкающих и размыкающих электрические цепи;

— и любых других устройств или механизмов, имеющих два различных состояния.

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


Что есть система?

Я ношу обувь 42-го размера. У других авторов и читателей размер ноги может быть другим. Соответственно они носят обувь меньшего (41-го, 40-го) или большего (43-го, 44-го) размера. Нумерация размеров обуви имеет строгий и понятный порядок, пронизанный общей идеей.

Словом, это образцовый пример системы, хорошо нам понятной, даже если мы не знаем, откуда взялись и что означают таинственные числа 40, 41, 42 и т. д.

Система противостоит хаосу, за примером которого, по мнению автора, тоже далеко идти не надо.

Одному из моих ближайших родственников в возрасте четырех лет понадобилось кое-что из детского гардероба. Я направился в «Детский мир».

Мне поручили приобрести вельветовый костюмчик 28-го размера. В продаже его не было; продавец предложил мне взамен трикотажный костюмчик, причем предупредил, что в моем случае следует почему-то брать 32-й размер, добавив, что, например, пижама для того же ребенка уже нужна 26-го размера. Я не стал спрашивать почему и пошел дальше. Через час у меня был список, согласно которому все для того же малыша полагались: ботиночки — 26-го размера, к ним калоши — 7-го размера, сандалии — 25-го размера, валенки — 18-го размера, к ним калоши — 9-го размера, чулки — 16-го размера, шапка меховая — 53-го размера…

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

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

Так, мы знаем, что в десятичной системе за числом 9 следует число 10, за 499 следует 500, а за 7855 — 7856. Такой переход от числа к числу мы обычно совершаем не задумываясь. Однако сознательно или бессознательно мы при этом всегда руководствуемся следующими правилами:

1. Заменить последнюю цифру числа следующей цифрой, имеющейся в этой системе (например, в числе 7855 заменить последнюю 5 на 6).

2. Если последняя цифра числа является наибольшей в этой системе, то ее следует заменить на наименьшую, а затем сдвинуться на одну колонку влево и заменить стоящую здесь цифру на старшую.

3. Если в этой колонке стоит наибольшая цифра системы, то надо повторять действие, предусмотренное предыдущим правилом, до тех пор, пока не встретится колонка, допускающая замену стоящей в ней цифры на старшую.

Попробуем, например, применить эти правила для перехода от числа 499 к следующему числу. Последняя цифра этого числа 9 является наибольшей цифрой в десятичной системе счисления, и согласно правилу 2 ее следует заменить на нуль. Сдвинувшись затем на одну колонку влево, видим, что и здесь стоит цифра 9. Согласно правилу 3 ее также заменяем на нуль, а затем, передвинувшись в следующую колонку, заменяем 4 на 5. В результате от числа 499 мы перейдем к числу 500.

Вот теперь, располагая методом, позволяющим переходить от одного числа к другому, мы можем утверждать, что ведем счет чисел по определенной системе; в нашем случае по десятичной.

Согласно этой системе сначала накапливаются единицы вплоть до 9. Следующее число 10 образуется двумя цифрами, ранее использованными для счета единиц. Цифра 1, записанная во второй колонке слева, или, как говорят, во втором разряде, означает, что счет теперь ведется десятками. Переход в третий разряд соответствует счету сотен и т. д. Число 499 фактически представляет собой 4 · 102 + 9 · 101 + 9 · 100 = 499.

Число 7856 в действительности есть 7 · 103 + 8 · 102 + 5 · 101 + 6 · 100 = 7856.

А число 4,99 равно 4 · 100 + 9 · 10–1 + 9 · 10–2 = 4,99.

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

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

Первые две цифры 0 и 1 в обеих системах одинаковы, однако уже для числа 2 в двоичной системе отдельного символа нет. Эквивалентная ему цифра образуется использованием уже имеющихся двух цифр и записывается так: 10. Чтобы избежать путаницы, будем число 2 читать: один-ноль.

Следующее число получим, пользуясь приведенными выше правилами. Согласно первому из них оно запишется как 11.

Для записи следующего числа нам придется применить правило 3 и использовать запись уже в трех разрядах: получим — 100. Следующими числами в двоичной системе будут 101, 110, 111; затем будут следовать четырехразрядные числа 1000, 1001, 1010 и т. д. В таблице приведены эти числа вместе с соответствующими им десятичными числами.