Глава 8
Альтернативы десятке
Число 10 — исключительно важное для человека. У большинства из нас по десять пальцев на руках и на ногах, и мы, конечно, предпочитаем, чтобы и тех, и других было по десять. Поскольку на пальцах удобно считать, человек выстроил всю систему счисления на основании числа 10.
Как упоминалось в предыдущей главе, такая система называется «система с основанием 10», или «десятеричная». Она кажется нам столь естественной, что поначалу сложно даже найти альтернативу. Действительно, когда видим число 10, нас тянет представить, что оно означает, например, десять уток.
Единственная причина, по которой возникает такая ассоциация, в том, что уток столько же, сколько и пальцев у нас на руках. Если бы у человека было иное количество пальцев, то и считали бы мы по-другому, и число 10 означало бы нечто иное. Например, число 10 может указывать и на такое количество уток.
Или так.
Или даже так.
Как только мы поймем, в каком случае 10 означает двух уток, можно будет приступать к разговору о представлении чисел при работе с переключателями, проводами, лампочками и реле (далее — и с компьютерами).
Что, если бы у людей было всего по четыре пальца на руке, как у мультяшек? Вероятно, нам бы даже не пришло в голову разрабатывать десятеричную систему счисления. Напротив, мы бы считали нормальным, естественным, разумным, неизбежным, неопровержимым и бесспорно верным построить систему счисления с основанием 8. Она называлась бы не десятеричной, а восьмеричной, или системой с основанием 8.
Если бы наша система счисления была построена на основании 8, то вот этот символ нам бы не требовался:
9.
Покажите этот символ мультяшке, и герой спросит: «Что это? Зачем это нужно?» Если задуматься, то и без этого символа можно обойтись:
8.
В десятеричной системе счисления нет специального символа для десятки, соответственно в восьмеричной системе счисления его нет для восьмерки.
В десятеричной системе счисления мы считаем: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, а потом 10. В восьмеричной системе считаем: 0, 1, 2, 3, 4, 5, 6, 7, а потом что? Цифры кончились. Остается лишь 10, и это правильный ответ. В восьмеричной системе за 7 следует 10. Но в таком случае 10 соответствует не десяти пальцам, которые есть на двух руках у человека. В восьмеричной системе 10 — это количество пальцев у мультяшек.
Давайте считать дальше на четырехпалых ступнях.
Имея дело с иными системами счисления, кроме десятеричной, можно не путаться, если называть число 10 «один-ноль». Аналогично 13 будет «один-три», а 20 — «два-ноль». Чтобы вообще обойтись без путаницы, можно говорить «два-ноль с основанием восемь» или «два-ноль восьмеричных».
Даже когда у нас кончатся пальцы на руках и ногах, можно и далее считать в восьмеричной системе. В принципе, процесс не отличается от счета в десятеричной, просто мы пропускаем все числа, в которых есть 8 или 9. Естественно, конкретные числа обозначают уже другие величины.
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 100…
Последнее число называется «один-ноль-ноль». Это общее количество пальцев мультяшки, умноженное само на себя.
При записи десятеричных и восьмеричных чисел можно избежать путаницы, записывая все числа с нижними индексами, обозначающими принадлежность к той или иной системе счисления. Нижний индекс ДЕСЯТЬ означает «основание десять», то есть десятеричную систему, а нижний индекс ВОСЕМЬ — «основание восемь», или восьмеричную систему.
Итак, Белоснежка повстречала 7ДЕСЯТЬ, или 7ВОСЕМЬ, гномов.
У мультяшек по 8ДЕСЯТЬ, или 10ВОСЕМЬ, пальцев на руке.
Бетховен написал 9ДЕСЯТЬ, или 11ВОСЕМЬ, симфоний.
У человека 10ДЕСЯТЬ, или 12ВОСЕМЬ, пальцев на руках.
В году 12ДЕСЯТЬ, или 14ВОСЕМЬ, месяцев.
В двух неделях 14ДЕСЯТЬ, или 16ВОСЕМЬ, дней.
Паспорт выдают в 16ДЕСЯТЬ, или 20ВОСЕМЬ, лет.
В сутках 24ДЕСЯТЬ, или 30ВОСЕМЬ, часов.
В латинице 26ДЕСЯТЬ, или 32ВОСЕМЬ, букв.
В английской кварте 907ДЕСЯТЬ, или 1134, граммов.
В покерной колоде 52ДЕСЯТЬ, или 64ВОСЕМЬ, карт.
Самый известный адрес по Сансет-Стрип — 77ДЕСЯТЬ, или 115ВОСЕМЬ.
Длина поля для американского футбола — 91ДЕСЯТЬ, или 131ВОСЕМЬ, метров.
На старте женского одиночного зачета в Уимблдонском турнире — 128ДЕСЯТЬ, или 200ВОСЕМЬ, участниц.
Площадь Мемфиса равна 640ДЕСЯТЬ, или 1000ВОСЕМЬ, квадратных километров.
Обратите внимание: в этом списке есть несколько круглых восьмеричных чисел. Круглым называется число, оканчивающееся на один или несколько нулей. Если десятеричное число оканчивается двумя нулями, значит, оно кратно 100ДЕСЯТЬ, а 100ДЕСЯТЬ — это 10ДЕСЯТЬ, умноженное на 10ДЕСЯТЬ. В восьмеричной системе два нуля в конце числа означают, что число кратно 100ВОСЕМЬ, то есть 10ВОСЕМЬ умножить на 10ВОСЕМЬ (или 8ДЕСЯТЬ умножить на 8ДЕСЯТЬ, что равно 64ДЕСЯТЬ).
Возможно, вы также заметили, что такие круглые восьмеричные числа, как 100ВОСЕМЬ, 200ВОСЕМЬ и 400ВОСЕМЬ, в десятеричной системе соответствуют 64ДЕСЯТЬ, 128ДЕСЯТЬ и 256ДЕСЯТЬ, и все эти десятеричные числа — степени двойки. Это логично. Например, число 400ВОСЕМЬ, равно 4ВОСЕМЬ умножить на 10ВОСЕМЬ и умножить на 10ВОСЕМЬ, и все это — степени двойки. Всякий раз при умножении степени двойки на степень двойки мы получаем еще одну степень двойки.
В следующей таблице даны некоторые степени двойки в десятеричном и восьмеричном представлении.
Степень двойки
Десятеричная система
Восьмеричная система
20
1
1
21
2
2
22
4
4
23
8
10
24
16
20
25
32
40
26
64
100
27
128
200
28
256
400
29
512
1000
210
1024
2000
211
2048
4000
212
4096
10 000
Круглые числа из правого столбца подсказывают, что системы счисления, отличающиеся от десятеричной, удобны для работы с двоичными кодами.
Структурно восьмеричная система аналогична десятеричной. Отличия лишь в деталях. Например, каждая позиция в восьмеричном числе — это цифра, умноженная на степень восьмерки.
Следовательно, восьмеричное число 3725ВОСЕМЬ можно разбить:
3725ВОСЕМЬ = 3000ВОСЕМЬ + 700ВОСЕМЬ + 20ВОСЕМЬ + 5ВОСЕМЬ.
Эту последовательность можно переписать несколько иначе. Например, при помощи степеней восьмерки в их десятеричном представлении:
3725ВОСЕМЬ = 3 × 512ДЕСЯТЬ +
7 × 64ДЕСЯТЬ +
2 × 8ДЕСЯТЬ +
5 × 1.
То же самое, записанное при помощи степеней восьмерки в восьмеричном представлении:
3725ВОСЕМЬ = 3 × 1000ВОСЕМЬ +
7 × 100ВОСЕМЬ +
2 × 10ВОСЕМЬ +
5 × 1.
А можно сделать вот так:
3725ВОСЕМЬ = 3 × 83 +
7 × 82 +
2 × 81 +
5 × 80.
Если выполнить эти расчеты в десятеричной системе, получится 2005ДЕСЯТЬ. Таким образом восьмеричные числа преобразуются в десятеричные.
Восьмеричные числа складываются и перемножаются в точности как десятеричные. Разница в том, что таблицы умножения и сложения для восьмеричных чисел строятся иначе. Вот таблица сложения восьмеричных чисел.
Например, 5ВОСЕМЬ + 7ВОСЕМЬ = 14ВОСЕМЬ, то есть восьмеричные числа можно складывать в столбик.
Начинаем справа: 5 плюс 3 равно 10, 0 пишем, 1 в уме; 1 плюс 3 плюс 4 равно 10, 0 пишем, 1 в уме; 1 плюс 1 плюс 6 равно 10.
Аналогично дважды два и в восьмеричной системе равно четырем. Но трижды три не равно девяти. А как? Трижды три равно 11ВОСЕМЬ, это столько же, сколько и 9ДЕСЯТЬ. Далее полностью приведена восьмеричная таблица умножения.
Здесь у нас 4 × 6 равно 30ВОСЕМЬ, но 30ВОСЕМЬ равно 24ДЕСЯТЬ, то есть 4 × 6 в десятеричной системе.
Восьмеричная система счисления столь же полноценна, как и десятеричная.
Мы разработали систему счисления для мультяшек. Теперь давайте создадим такую же систему для омаров. У омаров нет пальцев, но на кончиках передних лап у них клешни. Омарам подойдет четверичная система счисления с основанием четыре.
Вот как считают в четверичной системе: 0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33, 100, 101, 102, 103, 110 и т. д.
Не буду подробно останавливаться на четверичной системе, поскольку мы приближаемся к более важному вопросу. Как видите, здесь каждая позиция в числе соответствует степени четверки.
В четверичной системе счисления число 31 232 можно записать следующим образом:
31 232ЧЕТЫРЕ = 3 × 256ДЕСЯТЬ +
1 × 64ДЕСЯТЬ +
2 × 16ДЕСЯТЬ +
3 × 4ДЕСЯТЬ +
2 × 1ДЕСЯТЬ.
Что равнозначно записи:
31 232ЧЕТЫРЕ = 3 × 10 000ЧЕТЫРЕ +
1 × 1000ЧЕТЫРЕ +
2 × 100ЧЕТЫРЕ +
3 × 10ЧЕТЫРЕ +
2 × 1ЧЕТЫРЕ.
А это то же самое, что и:
31 232ЧЕТЫРЕ = 3 × 44 +
1 × 43 +
2 × 42 +
3 × 41 +
2 × 40.
Если мы выполним вычисления в десятичной системе счисления, то обнаружим, что 31 232ЧЕТЫРЕ — это 878ДЕСЯТЬ.
Теперь мы сделаем еще один прыжок, на этот раз окончательный. Представьте, что мы дельфины и можем использовать для подсчета два плавника. В данном случае мы имеем дело с системой счисления с основанием 2, или двоичной, или, иначе, бинарной (от лат. binary — «двойной», «состоящий из двух частей»). Понятно, что у нас будет только две цифры: 0 и 1.
С нулем и единицей мало что можно сделать, и, чтобы привыкнуть к двоичным числам, требуется практика. Проблема в том, что сразу заканчиваются цифры. Например, на следующем рисунке показано, как дельфин считает на плавниках.
Да, в двоичной системе счисления за 1 следует 10. Это странно, однако это не должно удивлять. Независимо от того, какую систему счисления мы используем, всякий раз, когда у нас заканчиваются отдельные цифры, первое двузначное число всегда 10. В двоичной системе счисления мы считаем:
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001…
Эти числа могут показаться большими, но на самом деле это не так. Скорее, двоичные числа очень быстро становятся длинными, а не большими.
Количество голов у людей — 1ДЕСЯТЬ, или 1ДВА.
Количество плавников у дельфинов — 2ДЕСЯТЬ, или 10ДВА.
Количество чайных ложек в столовой ложке — 3ДЕСЯТЬ, или 11ДВА.
Количество сторон у квадрата — 4ДЕСЯТЬ, или 100ДВА.
Количество пальцев на одной человеческой руке — 5ДЕСЯТЬ, или 101ДВА.
Количество конечностей у насекомых — 6ДЕСЯТЬ, или 110ДВА.
Количество дней в неделе — 7ДЕСЯТЬ, или 111ДВА.
Количество музыкантов в октете — 8ДЕСЯТЬ, или 1000ДВА.
Количество планет в Cолнечной системе, включая Плутон, — 9ДЕСЯТЬ, или 1001ДВА.
Количество центнеров в тонне — 10ДЕСЯТЬ, или 1010ДВА.
В двоичном числе, состоящем из большого количества цифр, позиции знаков соответствуют степени двойки.
Таким образом, каждый раз, когда встречаем двоичное число, состоящее из единицы и следующих за ней нулей, мы понимаем, что это число соответствует какой-либо из степеней двойки. Эта степень равна количеству нулей в этом двоичном числе. Вот наша расширенная таблица степеней двойки, демонстрирующая такое правило.
Допустим, у нас есть двоичное число 101101011010. Его можно записать так:
101101011010ДВА = 1 × 2048ДЕСЯТЬ +
0 × 1024ДЕСЯТЬ +
1 × 512ДЕСЯТЬ +
1 × 256ДЕСЯТЬ +
0 × 128ДЕСЯТЬ +
1 × 64ДЕСЯТЬ +
0 × 32ДЕСЯТЬ +
1 × 16ДЕСЯТЬ +
1 × 8ДЕСЯТЬ +
0 × 4ДЕСЯТЬ +
1 × 2ДЕСЯТЬ +
0 × 1ДЕСЯТЬ.
Или:
101101011010ДВА = 1 × 211 +
0 × 210 +
1 × 29 +
1 × 28 +
0 × 27 +
1 × 26 +
0 × 25 +
1 × 24 +
1 × 23 +
0 × 22 +
1 × 21 +
0 × 20.
Если просто сложить все слагаемые в десятичной системе, получим 2048 + 512 + 256 + 64 + 16 + 8 + 2, что составляет 2906ДЕСЯТЬ.
Для более легкого преобразования двоичных чисел в десятичные можно использовать следующую схему.
Эта схема позволяет конвертировать числа, содержащие до восьми двоичных разрядов; ее можно легко расширить. Введите до восьми цифр в восемь верхних полей, по одной цифре в каждый квадрат. Выполните восемь операций умножения и введите их результаты в восемь нижних полей. Сложите числа в этих восьми полях для получения окончательного результата. Этот пример демонстрирует процесс нахождения десятичного эквивалента двоичного числа 10010110.
Преобразовать десятичные числа от 0 до 255 в двоичные не так просто, однако вы можете использовать следующую схему.
Процесс преобразования сложнее, чем кажется, поэтому внимательно следуйте указаниям. Поместите десятичное число (меньшее или равное 255) в верхний левый квадрат. Разделите это число (делимое) на первый делитель (128), как показано на схеме. Поместите целую часть в нижнее поле (левый нижний квадрат), а остаток от деления — в поле справа (второй квадрат в верхнем ряду). Этот первый остаток является делимым, которое будет участвовать в следующей операции деления, где в качестве делителя используется число 64.
Помните, что каждая целая часть будет равна либо 0, либо 1. Если делимое меньше делителя, то целая часть от деления будет равна 0, а остаток — самому делимому. Если делимое больше или равно делителю, то целая часть от деления будет равна 1, а остаток — разности между делимым и делителем. Вот как преобразуется число 150.
Если вам нужно сложить или перемножить два двоичных числа, вероятно, будет легче выполнить вычисления в двоичной системе, не преобразуя числа в десятичные. Это должно понравиться. Представьте, как быстро вы могли бы освоить сложение, если бы потребовалось запомнить только это.
Давайте с помощью этой таблицы сложим два двоичных числа.
Начиная с правого столбца: 1 плюс 0 равно 1. Второй столбец справа: 0 плюс 1 равно 1. Третий столбец: 1 плюс 1 равно 0, 1 в уме. Четвертый столбец: 1 (перенесенное значение) плюс 0 плюс 0 равно 1. Пятый столбец: 0 плюс 1 равно 1. Шестой столбец: 1 плюс 1 равно 0, 1 в уме. Седьмой столбец: 1 (перенесенное значение) плюс 1 плюс 0 = 10.
Таблица умножения даже проще, чем таблица сложения, поскольку ее можно составить, используя два базовых правила умножения: умножая на 0, получаем 0, умножение на 1 не влияет на исходное число.
Вот процесс умножения числа 13ДЕСЯТЬ на число 11ДЕСЯТЬ в двоичной системе счисления.
Результат — 143ДЕСЯТЬ.
Люди, работающие с двоичными числами, часто предваряют их нулями, то есть пишут нули слева от первой 1, например 0011 вместо 11. Это совершенно не влияет на значение, а служит исключительно для красоты. В следующей таблице перечислены первые шестнадцать двоичных чисел и их десятичные эквиваленты.
Двоичное число
Десятичное число
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
10
1011
11
1100
12
1101
13
1110
14
1111
15
Давайте рассмотрим список двоичных чисел. Обратите внимание на каждый из четырех вертикальных столбцов, состоящих из нулей и единиц, и заметьте, как эти цифры чередуются в столбцах сверху вниз:
в крайнем правом столбце — 0 и 1;
во втором столбце справа — два 0 и две 1;
в следующем столбце — четыре 0 и четыре 1;
в крайнем левом столбце — восемь 0 и восемь 1.
В этом есть порядок, не так ли? Действительно, вы можете легко написать следующие шестнадцать двоичных чисел, просто повторив первые шестнадцать и добавив 1 в начале.
Двоичное число
Десятичное число
10000
16
10001
17
10010
18
10011
19
10100
20
10101
21
10110
22
10111
23
11000
24
11001
25
11010
26
11011
27
11100
28
11101
29
11110
30
11111
31
Вот еще один способ смотреть на это: при выполнении подсчета в двоичном формате крайняя цифра справа (также называемая младшим разрядом) поочередно принимает значения 0 и 1. Каждый раз, когда она изменяется с 1 на 0, вторая цифра справа, следующая за младшим разрядом, также изменяется либо с 0 на 1, либо с 1 на 0. Так что каждый раз, когда двоичная цифра изменяется с 1 на 0, следующая за ней цифра также меняется либо с 0 на 1, либо с 1 на 0.
При записи больших десятичных чисел мы используем запятые через каждые три знака для облегчения их восприятия. Например, если вы увидите число 12000000, вероятно, придется подсчитать количество цифр, однако, увидев число 12,000,000, вы сразу поймете, что оно означает 12 миллионов.
Двоичные числа очень быстро могут стать весьма длинными. Например, 12 миллионов в двоичной системе счисления записывается так: 101101110001101100000000. Чтобы такое число было легче воспринимать, каждые четыре двоичных разряда обычно разделяются пробелами (1011 0111 0001 1011 0000 0000). Далее в этой книге мы рассмотрим более сжатый способ записи двоичных чисел.
Сведя систему счисления к двоичным цифрам 0 и 1, мы достигли предела. Далее упрощать некуда. Более того, двоичная система соединяет арифметику с электричеством. В предыдущих главах мы рассматривали переключатели, провода, лампочки и реле, и любой из этих объектов может отображать двоичные цифры 0 и 1.
Провод может представлять собой двоичную цифру. Если по нему идет ток, то двоичная цифра равна 1, если нет — 0.
Переключатель может представлять собой двоичную цифру. Если переключатель включен, или замкнут, то двоичная цифра равна 1, если переключатель выключен, или разомкнут, то двоичная цифра — 0.
Лампочка может представлять собой двоичную цифру. Если лампочка горит, то двоичная цифра равна 1, если нет — 0.
Телеграфное реле может представлять собой двоичную цифру. Если реле замкнуто, то двоичная цифра равна 1, если разомкнуто — 0.
Двоичные цифры имеют непосредственное отношение к компьютерам.
Примерно в 1948 году американский математик Джон Тьюки (род. 1915) осознал, что в будущем словосочетание «двоичная цифра» (binary digit), вероятно, приобретет гораздо большее значение — по мере распространения компьютеров. Он решил создать новое, более короткое слово, чтобы заменить эти громоздкие пять слогов, и рассматривал такие варианты, как bigit и binit, но остановился на коротком, простом, элегантном и просто замечательном слове bit («бит»).