Наиболее привычной для нас является десятичная система счисления. Исторически вначале, видимо, использовалась непозиционная единичная система счета — с помощью камней или палочек (вспомним школьные палочки для счета!). Система счета состояла из двух чисел — один и два, а все, что больше двух, обозначалось, как "много".
Затем, благодаря наличию десяти пальцев рук у человека, возникла десятичная система счета. В этой системе используются специальные графические знаки — арабские цифры, которые можно записать в следующем порядке: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Таких знаков десять, и они специально разделены запятыми, чтобы показать, что это отдельные ("дискретные") знаки, которые не зависят друг от друга.
Идея позиционной системы счисления выдвигалась еще Архимедом в работе "Исчисление песка". Есть ли еще системы счисления, которые мы знаем и используем?
В разное время и у разных народов использовались системы счисления с различными основаниями:
В качестве примера, который непрерывно присутствует перед глазами, можно назвать часовой циферблат, у которого двенадцать основных "делений", а следовательно, используется двенадцатеричная система счисления.
Можно даже считать дюжинами — до революции в России было принято заказывать по несколько "дюжин пива". Отсюда же имеет свое происхождение понятие "чертова дюжина", т. е. число тринадцать.
Кстати, следует заметить, что с измерением времени связано довольно большое количество разных систем счисления.
Кроме уже упомянутых, можно назвать семидневную (недельную), месячную, годовую, а еще, не забыть бы, — секундную и минутную, обе являются шестидесятиричными.
Мы вспомнили несколько систем счисления (и, видимо, далеко не исчерпали этот список), которые мы используем в нашей обычной бытовой жизни, не отдавая себе в этом особого отчета.
Правда, стоит сознаться, что примеры разных систем счисления приведены с единственной целью: показать, что система счисления — это обычная и даже обыденная вещь. Для дальнейшего изложения они нам больше не потребуются. Почему? Потому что в компьютерных технологиях нет ничего, кроме импульсов, а следовательно, для внутреннего машинного языка достаточно только двух знаков.
Положив в основание только два знака (два вида сигналов), попытаемся построить все сияющее здание компьютерных технологий.
Мы уже выяснили, что каждый импульс представляет собой один из двух видов уровней тока (условно их можно определить как "наличие" или "отсутствие" тока).
В данный момент самое время вспомнить, зачем мы начали конвертирование десятичных чисел в двоичную систему счисления. Это нам необходимо не для того, чтобы убедиться в универсальности законов арифметики (дизайнеры и так охотно поверят специалистам-математикам), на самом деле, мы составили коды десятичных чисел в двоичной системе счисления, а это уже совсем немало.
Ведь, собственно говоря, приведенные в предыдущем разделе рассуждения уже можно квалифицировать как процесс кодирования, т. е. написание (представление) одного вида информации с помощью другого.
Таким образом, мы получаем возможность передавать любое десятичное число двоичными числами, а следовательно, импульсным способом, т. е. определенным сочетанием импульсов (в этом состоит требование компьютерных технологий).
В табл. 4.3 отражены коды первых двадцати десятичных чисел, которые легко передавать как последовательность импульсов.
Какое неудобство двоичной системы счисления бросается сразу в глаза? Заметно, что двоичные числа гораздо длиннее десятичных. Это закон мироздания: экономя на количестве цифр, мы "расплачиваемся" количеством разрядов.
И для того чтобы двоичные числа было легче воспринимать и отображать, их сжимают в восьмеричную систему счисления, о которой также необходимо сказать несколько слов.
Системы счисления
Эта глава необходима для знакомства с двоичной системой счисления (соответственно, восьмеричной и шестнадцатеричной как ее развитием), которая является источником большинства "магических" чисел как цифровой графики, так и компьютерных технологий в целом.
Коль скоро в предыдущей главе было определено, что для передачи информации импульсным способом необходимо наличие этапа кодирования в начале и этапа декодирования в конце, самое время приступить к обсуждению понятия "код".
Эта глава посвящена общему представлению о коде, а также основам систем счисления, а именно двоичной системе счисления и сжатым способам ее записи — восьмеричной и шестнадцатеричной системам счисления. Очень важный момент — это позиционный способ записи чисел.
Неизбежный этап кодирования аналогового сигнала в совокупность импульсов (то есть в цифровую форму) требует перехода на двоичную систему счисления, на которой, прежде всего, необходимо научиться записывать десятичные числа.
Коды пронизывают нашу жизнь, можно даже с полной уверенностью утверждать, что любое производство строится на базе самых разнообразных знаков (от букв и цифр до чертежей и карт).
Поэтому стоит сначала поговорить о понятии "код" в самом общем смысле.
Код— это совокупность знаков (символов, цифр, букв, пиктограмм и т. п.) и система определенных правил, с помощью которых информация представляется (кодируется) в виде набора знаков и в форме, удобной для передачи, обработки и хранения (или сокрытия).
Счисление (система счисления) — это способ представления любых чисел с помощью определенного количества знаков (цифр) по позиционному принципу.
В этом определении стоит выделить следующие важные моменты.
Позиционная система счисления состоит в использовании ограниченного числа цифр, зато позиция каждой цифры в числе обеспечивает значимость (вес) этой цифры. Позиция цифры на математическом языке называется разрядом.
Другими словами, значение цифры "переменчиво" и зависит от ее позиции в числе. Мы говорим, что в числе "10" цифра "1" — это уже не "единица", а "десяток", хотя и отображается с помощью одного и того же знака. Например, в числе "одиннадцать" ("11") две единицы имеют разное значение, это относится и к другим сочетаниям "единиц" — "111", "1111", "11 111" и т. д.
Основание позиционной системы счисления — это количество различных знаков или символов (цифр), используемых для отображения чисел в данной системе.
Выбор количества цифр диктуется какими-либо потребностями реальной жизни, науки или удобствами обработки. Исторически этот выбор определялся привычками или традициями конкретного народа.
Коль скоро мы утверждаем, что система счисления основывается на ограниченном количестве цифр, осталось задаться вопросом "сколько", какое количество цифр достаточно для решения этой проблемы.
Оказывается, что минимальное количество цифр действительно существует, а максимальное — нет, точнее, оно ограничено не принципиальными причинами, а сугубо практическими (или какими-то условиями уже не математического свойства). В данный момент важно понять, что существует не одно множество цифр, образующих систему счисления. Это множество получило особое название — основание системы счисления.
Наконец, пришло время для итоговой таблицы всех рассмотренных систем счисления. В табл. 4.6 представлены числа в нескольких интересующих нас системах счисления, но не все числа, а только те, которые являются "круглыми" в одной из систем (они выделены полужирным шрифтом).
Таблица 4.6. "Круглые" числа в нескольких системах счисления
Двоичная |
Восьмеричная |
Десятичная |
Шестнадцатеричная |
||
10 = 21 |
2 |
2 |
2 |
||
100 = 22 |
4 |
4 |
4 |
||
1010 |
12 |
10 = 101 |
А |
||
1000 = 23 |
10 = 81 |
8 |
8 |
||
10000 = 24 |
20 |
16 |
10 = 161 |
||
1 00000 = 25 |
40 |
32 |
20 |
||
1000000 = 26 |
100 = 82 |
64 |
40 |
||
1100100 |
144 |
100 = 102 |
64 |
||
1 0000000 = 27 |
200 |
128 |
80 |
||
100000000 = 28 |
400 |
256 |
100 = 162 |
||
1000000000 = 29 |
1000 = 83 |
512 |
200 |
||
1111101000 |
1750 |
1000 = 103 |
ЗЕ8 |
||
1 0000000000 = 210 |
2000 |
1024 |
400 |
||
100000000000 = 211 |
4000 |
2048 |
800 |
||
1 00000000000 = 212 |
10000 = 84 |
4096 |
1000 = 163 |
||
Обратите внимание на одну интересную закономерность, заметную при рассмотрении этой таблицы. "Круглые" числа во всех системах счисления расположены там, где происходит добавление следующего разряда, а количество нулей соответствует степени числа на том же основании.
Действительно, если мы располагаем только десятью знаками (цифрами), то мы сможем записать только десять чисел (от 0 до 9). Но на числе "девять" числовая ось не заканчивается, следовательно, можно двигаться дальше.
А именно: пишем "9 + 1 = ", но все цифры уже использованы, поэтому мы снова начинаем с первой цифры и пишем "0". Но сумма "9 + 1" никак не может быть равной нулю, т. е. "полному отсутствию", наоборот, мы достигли числа "десять", для которого существует специальное слово, но отсутствует специальный знак.
Поэтому, чтобы указать, что мы уже один раз прошли цикл с этой совокупностью цифр, перед нулем ("в предыдущей позиции") мы ставим цифру "1" и тем самым получаем требуемое число "10".
Вот это и называется позиционным методом записи чисел.
Звуки, составляющие слова "компьютер" на русском языке или "computer" на английском, никак не связаны с тем предметом, который они обозначают. Из тех же букв можно составить и другие слова, абсолютно ничего общего не имеющие с исходными словами.
Если бы пользователи компьютерных технологий могли превратиться в микроскопических существ и затаиться в компьютере на какой-нибудь шине, по которой передаются сигналы, то они бы увидели, что мгновенно проносятся совершенно одинаковые импульсы — как поезда метро: поезд — пустота, поезд — пустота...
Исходя из этого, с помощью импульсов можно передавать только два разных сигнала, для обозначения которых потребуется всего два разных знака (например, условимся обозначать наличие тока, скажем, "единицей", а отсутствие сигнала - "нулем", хотя на самом деле, наоборот). А затем, используя позиционный метод и определенные последовательности знаков, обеспечим возможность записи любых чисел.
Таким образом, мы подошли к рассмотрению системы счисления, основание которой равно двум. В этой системе счисления используются всего два знака, две цифры — "0" и "1".
Такая система получила название двоичной системы счисления. Ее еще называют бинарной, от английского слова "binary", что, собственно, и переводится как "двоичный".
Теперь предстоит совсем легкая прогулка, связанная с шестнадцатеричной системой счисления. В этом случае, надеемся, вы подозреваете и, видимо, справедливо, что у нас должно теперь быть 16 различных цифр.
Но, как мы знаем, традиционных ("арабских") цифр всего десять. А требуется шестнадцать. Получается, что не хватает шести знаков.
Едва ли кто-нибудь из нематематиков в состоянии освоиться с мыслью, что цифры могут представлять собой культурную и эстетическую ценность или иметь какое-нибудь отношение к таким понятиям, как красота, сила, вдохновение.
Норберт Винер
Сначала позволим себе напомнить различие между цифрами и числами: число — это абстрагированная от конкретики запись количества (например, число 25 — это двадцать пять предметов чего угодно и не только предметов, а, скажем, лет или килограммов), а цифра — это специальный знак для обозначения количества единиц. Следует обратить внимание, что цифры — это тоже записи чисел, например 8 — это не только цифра, но и число.
Слово "код" происходит от латинского слова "codex", что означает "свод" или "сборник".
Любая система знаков несет на себе черты типичного кода. Учеными, которые занимаются проблемами лингвистики и особенно семиотики, давно уже отмечено, что знак как таковой никакого отношения не имеет к тому, что он обозначает.
Семиотика (от греческого слова "semeion", что переводится как "знак" или "признак") — это наука, исследующая свойства знаков и знаковых систем во всем их многообразии. В человеческом обществе рассматриваются как естественные, так и искусственные знаковые системы, главным образом языки программирования, а также более глубокие явления культуры (мифы, ритуалы, обычаи). Кстати, в медицине также есть особый раздел, который называется семиотика, в этом разделе развивается учение о признаках болезней (симптомах), что можно трактовать как определенные "знаки" болезней, которые необходимо знать, чтобы точно и вовремя распознать болезнь.
Вся жизнь современного человека проходит в море разнообразных кодов. Образование в определенном смысле — это и есть постижение кодовых систем, которые выработало все человечество, отдельный народ, наука, профессия и т. д. Однако, выучившись, мы перестаем замечать эти многочисленные системы кодов, как не замечаем воздуха, которым дышим.
Слово "цифра" происходит от позднелатинского слова "cifra", первые цифры появились у египтян и вавилонян, причем интересно, что цифры, как специальные знаки, образовались позже, чем буквы. Так, многие народы (греки, финикияне, евреи, сирийцы) для цифр использовали буквы алфавита, в России аналогичная система применялась вплоть до XVI века. Современные так называемые "арабские цифры" имеют неясное происхождение, например, утверждают, что они принесены в Европу арабами в XIII веке возможно из Индии. Повсеместно их стали использовать с XV века.
Число — это одно из фундаментальных и самых древних понятий математики; оно появилось сначала в связи со счетом отдельных предметов, а затем, абстрагировавшись, стало обозначать количественную меру. Это привело к идее о бесконечности натурального ряда чисел: 1, 2, 3, 4... и т. д. Для наших целей такого определения достаточно, но математиками были разработаны и другие числа. В частности, задачи измерения площадей привели к понятию рационального (дробного) числа, затем появились отрицательные числа, необходимость в вычислении отношения диагонали квадрата к его стороне привела к открытию иррациональных чисел, рациональные и иррациональные числа составляют совокупность действительных чисел и т. д. И лишь в XIX веке была разработана теория действительных чисел. Новый импульс эта теория получила в связи с развитием компьютерных технологий.
Со школьной скамьи известно, что числовая ось бесконечна, поскольку к каждому числу можно прибавить еще единицу и получить следующее число, с которым можно поступить так же. При этом понятно, что придумывать какие-либо специальные обозначения (цифры) для любого элемента (числа) бесконечной числовой оси нереально.
Не всякие числовые системы используют именно такой позиционный способ записи, в истории человечества были и иные эксперименты. Вспомним, например, римские цифры. В них все оригинально: другие знаки и другие принципы. Способ записи чисел с помощью римских цифр не грешит единообразием: если цифра расположена справа, то ее значение прибавляется к предыдущей, например число "XI" означает "одиннадцать", а если — слева, то значение вычитается, например число "IX", состоящее из тех же цифр, уже означает только "девять". Кроме того, в римской системе счисления в числе вес цифры X в любой позиции равен просто десяти, например число XXXII (тридцать два). И, наконец, цифры разбросаны по оси чисел (табл. 4.1).
В нашу современную жизнь многое пришло из Рима, в том числе римское право, латынь в медицине и фармакологии. Однако римская система счисления не прижилась, потому что она отличается указанной выше сложностью, которая препятствует технологичности: скажем, римские числа трудно складывать или умножать, не говоря уже о более сложных функциях.
Но поскольку система действительно оригинальная, то она окончательно не забыта, а используется в "торжественных случаях". Вспомним обозначения съездов партии, иногда в академических изданиях с помощью римских цифр проставляется год издания и т. д. И это уже не математика, а определенный способ стилизации и дизайнерских ухищрений.
Таблица 4.1. Сравнение арабской и римской записи чисел
Арабские числа |
Римские числа |
Арабские числа |
Римские числа |
||
1 |
I |
8 |
VIII |
||
2 |
II |
9 |
IX |
||
3 |
III |
10 |
X |
||
4 |
IV |
50 |
L |
||
5 |
V |
100 |
С |
||
6 |
VI |
500 |
D |
||
7 |
VII |
1000 |
М |
||
Невозможно каждому числу на бесконечной числовой оси поставить в соответствие особый знак — цифру.
Поэтому для записи произвольного числа бесконечной числовой оси прибегают к помощи одной или нескольких систем счисления.
Платой за приспособленность к компьютерным технологиям является ограничение в количестве знаков (цифр) и использование непривычной двоичной системы счисления.
Действительно, для записи любых чисел используются всего два знака из огромного количества, которое выработало человечество за несколько тысячелетий своего развития. Вместо живого разнообразия знаков, привычных для человека, в компьютерных технологиях применяются только два: в математической нотации это — "нолик" и "единичка".
Если мы обращаемся к восьмеричной системе счисления, то это означает, что можно использовать гораздо больше цифр, чем это принято в двоичной, но меньше, чем в десятичной, а именно можно оперировать восемью цифрами: 0, 1, 2, 3, 4, 5, 6, 7 — и не более.
Логика конвертирования десятичных чисел в восьмеричные (кодирование в восьмеричную систему счисления) совершенно идентична приведенной выше.
Более подробная информация — в разд. "Запись целых чисел в двоичной системе счисления" данной главы.
Действительно, в определенный момент цифры заканчиваются (наступает "кризис переходного периода").
Десятичное число "8" становится восьмеричным числом "10" ("восьмеричной десяткой"). Число "9" будет восьмеричным числом "11", число "10" — восьмеричным числом "12". И так далее до десятичного числа "15", которое в восьмеричном виде равно числу "17". А дальше?
Цифры снова кончились. Как будет представлено десятичное число "16" в восьмеричной системе счисления?
178 + 1 = ...,
но сумма "78 + 1" равняется "10" в восьмеричной системе счисления, а, следовательно, восьмеричный "десяток" необходимо складывать с "десятком",
уже имеющимся, т. е. получается сумма, присутствующая в восьмеричной системе: "1 + 1 = 2". В результате получается, что
178 + 1 = 208.
Дальше — восьмеричное число "21" и т. п., вплоть до восьмеричного числа "77". И только после этого будет восьмеричная "сотня".
Представим эту информацию в виде таблицы (табл. 4.4).
Таблица 4.4. Соответствие десятичных и восьмеричных чисел
Десятичные числа |
Восьмеричные числа |
Десятичные числа |
Восьмеричные числа |
||
0-7 |
0-7 |
25-63 |
31-77 |
||
8 |
10 |
64 |
100 |
||
9-15 |
11-17 |
128 |
200 |
||
16 |
20 |
256 |
400 |
||
17-23 |
21-27 |
512 |
1000 |
||
24 |
30 |
1024 |
2000 |
||
Но даже такие числа все-таки мало экономны, по крайней мере, их разрядность не уступает десятичной системе, поэтому в компьютерных технологиях применяется еще одна система счисления, которая называется шестна-дцатеричной.
Таблица 4.5. Соответствие десятичных и шестнадцатеричных чисел
Десятичное число |
Шести адцате-ричное число |
Десятичное число |
Шести адцате-ричное число |
||
0-9 |
0-9 |
29 |
1D |
||
10 |
А |
30 |
1Е |
||
11 12 |
В С |
31 32-41 |
1F 20-29 |
||
13 |
D |
42-47 |
2A-2F |
||
14 |
Е |
48-255 |
30-FF |
||
15 |
F |
256 |
100 |
||
16 |
10 |
512 |
200 |
||
17-25 |
11-19 |
1024 |
400 |
||
26 |
1А |
1280 |
500 |
||
27 |
1В |
4096 |
1000 |
||
28 |
1C |
|
|
||
Таблица 4.2. Начало таблицы преобразования десятичных чисел в двоичные
Десятичная система счисления |
Двоичная система счисления |
||
0 1 |
0 1 |
||
Таблица 4.3. Соответствие десятичных и двоичных чисел
Десятичное число |
Двоичное число |
Десятичное число |
Двоичное число |
||
0 |
0 |
11 |
1011 |
||
1 |
1 |
12 |
1100 |
||
2 |
10 |
13 |
1101 |
||
3 |
11 |
14 |
1110 |
||
4 |
100 |
15 |
1111 |
||
5 |
101 |
16 |
10000 |
||
6 |
110 |
17 |
10001 |
||
7 |
111 |
18 |
10010 |
||
8 |
1000 |
19 |
10011 |
||
9 |
1001 |
20 |
10100 |
||
10 |
1010 |
|
|
||
Настало время разобраться, каким же образом можно записывать любые целые числа с помощью двоичной системы счисления, т. е. с помощью всего двух цифр "0" и "1".