Kitabı oxu: «Код. Тайный язык информатики»

Şrift:

Информация от издательства

Научные редакторы Валерий Артюхин, Азат Гизатулин

Издано с разрешения Pearson Education, Inc.

Книга рекомендована к изданию Дмитрием Воротилиным, Юрием Коровкиным, Александром Самохваловым, Ольгой Соминой

Все права защищены.

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

© Authorized translation from the English language edition, entitled Code: The Hidden Language of Computer Hardware and software, 1st Edition; ISBN: 0735611319; by Petzold, Charles; published by Pearson, representing Microsoft Press

© 2000 by Charles Petzold. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

Russian language edition published by Mann, Ivanov, and Ferber Publishers. Copyright © 2019.

All rights reserved.

© Перевод на русский язык, издание на русском языке, оформление. ООО «Манн, Иванов и Фербер», 2019

* * *

Предисловие к оригинальному изданию

Замысел «Кода» я вынашивал лет десять. И тогда, и во время работы над рукописью, и даже когда книга вышла из типографии многие спрашивали: «О чем она?»

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

Как я и опасался, отклики были неблагожелательными. На возражение в духе: «А-а, у меня уже есть такая книга» – я немедленно парировал: «Отнюдь, такой – нет». И по-прежнему так считаю. «Код» не похож на прочие книги «о компьютерах». В нем нет больших цветных иллюстраций с дисководами, где стрелками показано, как данные поступают в компьютер, нет рисунков, где паровозик в товарных вагончиках везет нули и единички. Метафоры и сравнения чудесны в своей буквальности, но они ни на что не годны, лишь затмевают красоту технологий.

Мне говорили: «А кому интересно, как работают компьютеры?» Верное замечание. Мне, например, нравится вникать в устройство приборов, но я хочу сам решать, когда это делать. Так, описать, как работает мой холодильник, я смогу лишь под пыткой.

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

На вопрос о дисковой и оперативной памяти принято отвечать: «Память похожа на столешницу, а диск – на ящики стола». В принципе неплохой ответ, но мне он кажется неудовлетворительным. Создается впечатление, будто архитектура компьютера разрабатывалась по образу и подобию бюро. На самом деле разница между оперативной и дисковой памятью – искусственная и обусловлена отсутствием единого энергонезависимого и при этом быстро работающего носителя. Так называемая архитектура фон Неймана, доминирующая в компьютерной индустрии уже более 50 лет, возникла в результате этого технического изъяна. Когда меня спрашивали, как запускать программы для Macintosh под Windows, я впадал в ступор, осознавая, что для ответа придется затронуть массу технических тонкостей, которые собеседник явно сразу не поймет.

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

По сути, компьютеры иерархичны: на самом нижнем уровне располагаются транзисторы, а венчает все информация, которая выводится на монитор. В книге мы будем придерживаться этой иерархии. В принципе, книга и структурирована от уровня к уровню. И этот путь не столь сложен, как может показаться. Да, в современном компьютере происходит масса всякой всячины, но это самые обычные и простые операции.

Хотя в настоящее время компьютеры сложнее, чем четверть или полвека назад, они не изменились фундаментально. Вот почему изучать историю техники так здорово: чем сильнее углубляешься в прошлое, тем проще становятся технологии. Именно поэтому легко добраться до точки, где понятно решительно все.

В книге «Код» я заглянул настолько далеко в прошлое, насколько смог. Сам поразился, что удалось добраться до XIX века и на примере первых телеграфных машин объяснить устройство компьютера. Теоретически все, о чем говорится в первых 17 главах, легко собирается из простейших электрических компонентов, которые в ходу уже более века.

Думаю, благодаря всей этой винтажной технике при чтении вы испытаете некоторую ностальгию. Книгу «Код» невозможно было бы озаглавить «Еще быстрее, еще технологичнее» или «Сверхскоростной бизнес на цифровых нейронах»: определение бита дается лишь на 79-й странице, байта – на 199-й. Транзисторы впервые упоминаются на 156-й странице, и то вскользь.

Итак, пусть «Код» и весьма основательно объясняет устройство компьютера (найдется немного других книг, где описано, например, как именно работает процессор), стиль книги вполне развлекательный. Несмотря на глубину темы, я старался устроить читателю максимально комфортную прогулку. Без всяких вагончиков с нулями и единицами.

Чарльз Петцольд

16 августа 2000 года

[Код]

3а. Система сигналов для представления букв и цифр при передаче сообщений.

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

4. Система символов, применяемая для представления компьютерных команд…

Словарь английского языка американского наследия

Глава 1. Лучшие друзья

Вам десять лет. Ваш лучший друг живет на другой стороне улицы, напротив. Даже окна ваших спален обращены друг к другу. Каждый вечер родители объявляют отбой в безбожно ранний час, а вам еще хочется пообщаться, поделиться мыслями, наблюдениями, секретами, сплетнями, шутками и мечтами. Никто не вправе вас за это упрекнуть. В конце концов, стремление к коммуникации – одно из наиболее характерных человеческих качеств.

Пока в спальнях горит свет, можно помахать друг другу из окон и, полагаясь на примитивный язык тела, жестикулируя, обменяться парой мыслей. Однако передавать таким образом сложную информацию вряд ли удастся. И как только родители скомандуют: «Погаси свет!» – ситуация кажется безнадежной.

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

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

Можно ли общаться при помощи вспышек? Попробовать точно стоит. В первом классе вы учились писать на бумаге слова и буквы, поэтому кажется уместным экстраполировать эти знания на обмен сигналами. Просто встаньте у окна и попытайтесь рисовать буквы светом. Чтобы написать О, включите фонарик, опишите им круг в воздухе, а потом выключайте. I – это вертикальная палочка. Но, как вы вскоре убедитесь, этот метод просто не работает. Наблюдая за фонариком друга, которым тот выводит в воздухе буквы, вы поймете, как сложно мысленно скомпоновать эти штрихи во что-то цельное. Завитушки и мазки света не слишком точны.

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

Сначала разработаем простой метод. Каждая буква алфавита соответствует последовательности бликов. Таким образом, один блик будет означать А, два – Б, три – В и т. д. Для Я уже понадобятся 33 блика. Слово «ГДЕ» – 4 блика + 5 бликов + 6 бликов, которые передаются с небольшими паузами, чтобы не перепутать эту серию с 15 бликами, то есть с Н. Паузы-пробелы между словами должны быть чуть длиннее.

Но вот что скажу: махать фонариком в воздухе больше не понадобится. Достаточно направить его куда нужно и нажимать на кнопочку. Но здесь возникает другая проблема: одно из первых сообщений, которое вы решите отправить («Как дела?»), растянется на 44 вспышки! Более того, придется забыть о пунктуации, ведь неизвестно, сколько бликов соответствуют вопросительному знаку.

Однако вы уже у цели. Вы предполагаете, что кто-то уже сталкивался с такой проблемой. Рано утром вы отправляетесь в библиотеку на поиски и узнаёте о чудесном изобретении под названием «азбука Морзе». Вот то, что нужно, пусть даже теперь придется переучиваться, как пишутся все буквы алфавита.

В чем разница: в изобретенной вами системе каждой букве алфавита соответствует определенное количество бликов, от 1 для А до 33 для Я. В азбуке Морзе два вида бликов: краткие и долгие. Разумеется, при этом код Морзе получается сложнее, но на практике оказывается гораздо эффективнее. Теперь словосочетание «Как дела?» состоит всего из 24 бликов, а не из 44, причем с учетом кода вопросительного знака.

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

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

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

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


Звуки, которые мы произносим и складываем в слова, – код, понятный любому, кто слышит наш голос и понимает язык, на котором мы говорим. Этот код называется говорением, или речью. Существуют и другие коды для записи слов на бумаге (камне, дереве, в воздухе, например когда самолет выводит рекламные надписи в небе). Такой код – это и рукописные и печатные символы, которые мы видим в книгах, журналах или газетах. Мы называем его письменной речью, текстом. Во многих языках речь и текст согласуются друг с другом. Например, в английском буквы и буквосочетания (в большей или меньшей степени) соответствуют произносимым звукам.

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

При общении мы пользуемся различными кодами, поскольку одна кодировка удобнее других. Например, устную речь невозможно хранить на бумаге, и ее заменяет письмо. Тихо передавать информацию на расстоянии невозможно ни при помощи речи, ни на бумаге. Удобная альтернатива – азбука Морзе. Далее мы увидим, что в компьютерах применяются различные типы кодов для передачи чисел, звуков, музыки, изображений и видео. Компьютер не может работать непосредственно с человеческими кодами: машина не в состоянии сымитировать работу человеческих глаз, ушей, рта и пальцев. Недавно1 в компьютерной технике наметилась такая тенденция: настольные ПК собирают и хранят различные виды информации, используемой при человеческом общении, и имеют возможность манипулировать такой информацией и ее отображениями. Это визуальная (текст, картинки) и акустическая (речь, звуки, музыка) информация, их комбинация (анимация или кино). Для всех этих типов требуются собственные коды, точно так же как при разговоре используются одни органы (рот и уши), а при письме и чтении – другие (руки и глаза).

Даже сама таблица с азбукой Морзе – в некотором роде код. В таблице каждая буква представлена последовательностью точек и тире. Но как передать точки и тире? Получается, они соответствуют бликам. Для обозначения точки мы быстро перещелкиваем кнопку фонарика (короткий блик), тире – задерживаем фонарик включенным чуть дольше. Так, чтобы передать А, мы быстро перещелкиваем фонарик, а потом включаем и выключаем его более медленно. Перед отправкой следующего символа делаем небольшую паузу. Принято, что тире должно быть примерно втрое длиннее точки. Так, если точка длится одну секунду, то тире – три (на самом деле азбука Морзе транслируется гораздо быстрее). Адресат видит короткий сигнал, затем длинный и понимает, что это А.

Паузы между точками и тире в азбуке Морзе критически важны. Так, при передаче А фонарик должен быть выключен между точкой и тире в течение периода, по длительности примерно равного одной точке. (Если точка длится одну секунду, то промежуток между точкой и тире также длится секунду.) Между буквами в слове выдерживаются более долгие паузы, сравнимые по длительности с тире (в данном случае по три секунды). Например, вот так на азбуке Морзе будет «привет» (обратите внимание на паузы между буквами).



Между словами выдерживается период длительностью примерно два тире (шесть секунд, если тире – три секунды). Вот код фразы «как дела».



Длительность периодов, в течение которых фонарик остается включен или выключен, не фиксируется. Все периоды отсчитываются относительно длительности точки, а эта длина зависит от того, как быстро удается перещелкивать фонарик, насколько быстро отправитель азбуки Морзе успевает вспомнить код для той или иной буквы. Тире у быстрого отправителя может получиться таким же коротким, как точка у неторопливого. Из-за этой небольшой проблемы расшифровка сообщений может усложняться, но после первых двух-трех букв адресат обычно успевает сориентироваться, где точка, а где тире.

На первый взгляд, определение кода Морзе – под определением в данном случае я понимаю соответствие различных последовательностей точек и тире буквам алфавита – кажется столь же произвольным, как и раскладка клавиатуры на пишущей машинке. Если присмотреться, не все так однозначно. Сравнительно простые и краткие коды присваиваются более частотным буквам алфавита, например E и T2. Любители игр «Эрудит» и «Поле чудес» могли это сразу приметить. У редких букв (например, Q и Z на латинице, за которые в «Эрудите» присваивается по 10 очков) коды длиннее.

Практически каждый хоть немного знает азбуку Морзе. Три точки, три тире, три точки – SOS, международный сигнал бедствия. SOS не аббревиатура. Это просто код из азбуки Морзе, который легко запоминается. Во время Второй мировой войны Британская радиовещательная компания предваряла некоторые передачи первыми нотами из Пятой симфонии Бетховена: ТА-ТА-ТА-ТАММММ! Сочиняя эту музыку, Людвиг ван Бетховен еще не мог знать, что именно такая последовательность сигналов (точка-точка-точка-тире) в азбуке Морзе будет соответствовать букве V, с которой начинается английское слово victory – «победа».

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



Эти коды как минимум чуть более регулярны, чем буквенные. Для большинства знаков препинания используются по пять, шесть или семь точек и тире.



Кроме того, существуют дополнительные коды для букв с диакритическими знаками из некоторых европейских языков и специальные последовательности-сокращения. Одно из таких сокращений – код SOS. Его следует посылать непрерывно, делая между каждой тройкой символов паузу в одну точку.

Вы убедитесь, что общаться с другом азбукой Морзе гораздо удобнее, если вооружиться специальным фонариком. Кроме обычного переключателя-ползунка, на такой фонарик монтируется кнопочный переключатель, который мы нажимаем и отпускаем, и фонарик зажигается и гаснет. Напрактиковавшись, вы, вероятно, научитесь передавать и принимать по пять-десять слов в минуту, что все равно гораздо медленнее, чем речь (при разговоре в минуту укладывается около 100 слов3), но вполне неплохо.

Когда вы с другом наконец-то выучите азбуку Морзе (а иначе общение при помощи этих сигналов не построить), вы сможете пользоваться таким словарем и в обычной речи. Для максимально быстрого общения произносите точку как «дих» («дит», если это последняя буква в слове), а тире – как «дах». Подобно тому как азбука Морзе позволяет сократить письмо до точек и тире, устный код редуцирует речь всего до двух слогов.

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

Глава 2. Коды и комбинации

Азбуку Морзе придумал Сэмюэл Финли Бриз Морзе (1791–1872). Это изобретение неотделимо от создания телеграфа, о работе которого нам также предстоит узнать. Азбука Морзе послужила хорошим вводным материалом для знакомства с сущностью кода, а телеграф – такой же удобный пример, иллюстрирующий аппаратное обеспечение компьютера.

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

Принимать азбуку Морзе и переводить ее в обычные слова значительно сложнее и дольше, поскольку вы работаете в обратном порядке: выясняете, какая буква соответствует конкретной кодовой последовательности точек и тире. Например, если вы получите сигнал «тире-точка-тире-тире», придется заглянуть в таблицу и просмотреть почти все буквы одну за другой, пока не выяснится, что перед вами Ы.

Проблема в том, что у нас есть таблица для следующего перевода:

буква алфавита → последовательность азбуки Морзе, состоящая из точек и тире.

Однако нет обратной таблицы:

последовательность азбуки Морзе, состоящая из точек и тире, → буква алфавита.

В начале изучения азбуки Морзе такая таблица, безусловно, пригодилась бы. Правда, не вполне понятно, как ее составить. Точки и тире не допускают никакого подобия алфавитного порядка.

Давайте забудем об алфавите. Пожалуй, разумнее сгруппировать коды таким образом, чтобы их расстановка зависела от количества точек и тире в той или иной букве. Так, последовательность из азбуки Морзе, содержащая одну точку и одно тире, может означать всего одну из двух букв: Е или Т.



Комбинации, в которых содержится по два знака (либо точки, либо тире), дают нам уже четыре буквы: И, А, Н и М.



Паттерн из трех символов, точек или тире, дает нам восемь букв: С, Д, У, К, Р, Г, О, В.



Наконец (если мы хотим прекратить это упражнение, пока не перешли к цифрам и знакам препинания), четырехзначные последовательности точек и тире дают нам еще 16 символов.



Всего в этих таблицах содержится 2 + 4 + 8 + 16 кодов суммарно для 30 букв; это на четыре кода больше, чем требуется для полной латиницы, состоящей из 26 букв. Именно поэтому четыре кода в последней таблице отведены под буквы с диакритическими знаками.

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

Замечаете закономерность в размерах четырех таблиц? Обратите внимание: в каждой следующей таблице вдвое больше кодов, чем в предыдущей. Это логично: в последующей таблице содержатся все коды из предыдущей «плюс точка», а также все коды из предыдущей «плюс тире».

Эту тенденцию можно резюмировать следующим образом.



Каждая из четырех таблиц содержит вдвое больше кодов, чем предшествующая ей таблица, так что если в первой таблице 2 кода, то во второй – 2 × 2 кодов, в третьей – 2 × 2 × 2 кодов. Вот как еще можно это представить.



Разумеется, при умножении числа самого на себя можно использовать степени. Так, 2 × 2 × 2 × 2 можно записать как 24 (2 в четвертой степени). Числа 2, 4, 8 и 16 являются степенями двойки, поскольку представляют произведения, которые можно получить умножением двойки самой на себя. Итак, нашу таблицу можно переписать и так.



Таблица сильно упростилась. Количество кодов равно просто 2 в степени <количество точек и тире>. Можно резюмировать табличные данные в виде простой формулы:

Количество кодов = 2количество точек и тире.

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

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

На схеме показано, какие буквы получаются при постепенном усложнении последовательностей точек и тире. Чтобы расшифровать конкретную последовательность, идите по стрелкам слева направо. Допустим, мы хотим выяснить, какая буква соответствует коду «точка-тире-точка». Начинаем слева, берем точку; далее идем по стрелкам, выбираем тире, а затем еще одну точку. Получаем букву R, расположенную около последней точки.

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



Рискуя получить схему, которая не поместится на печатной странице, мы могли бы расширить ее и добавить туда пятизначные коды из точек и тире. Последовательность из пяти точек и тире даст нам 32 (2 × 2 × 2 × 2 × 2, или 25) дополнительных кода. Как правило, этого достаточно не только для букв, но и для 10 цифр и 18 знаков препинания, включаемых в азбуку Морзе: цифры действительно кодируются пятизначными последовательностями точек и тире. Правда, многие другие пятизначные коды зарезервированы не за знаками препинания, а за буквами с диакритическими знаками.

Чтобы система учитывала все знаки препинания, в нее нужно включить последовательности из шести точек и тире. Таким образом получим 64 (2 × 2 × 2 × 2 × 2 × 2, или 26) дополнительных кода для суммарного множества из 2 + 4 + 8 + 16 + 32 + 64, или 126, символов. Для азбуки Морзе этого слишком много, поэтому большинство таких длинных кодов остаются неопределенными. Слово «неопределенный» в данном контексте указывает на код, который ничего не означает. Если бы вы, принимая азбуку Морзе, получили неопределенный код, то могли бы почти не сомневаться, что кто-то просто допустил ошибку.

У нас хватило смекалки построить эту небольшую формулу:

Количество кодов = 2количество точек и тире.

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



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

Код Морзе называется двоичным (что буквально означает «два на два»), поскольку любой его элемент включает только два компонента: точку и тире. Такой код подобен монете, которая может упасть только решкой или орлом. Двоичные объекты (например, монеты) и двоичные коды (например, азбука Морзе) всегда можно описать в виде степеней двойки.

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

Глава 3. Брайль и двоичные коды

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

Луи Брайль родился в 1809 году во французском городке Кувре, в 40 километрах к востоку от Парижа. Отец мальчика был шорником. Будучи трех лет от роду (а в таком возрасте дети не должны играть в отцовской мастерской), Луи случайно ткнул себе в глаз шорным ножом. В ране начался процесс заражения, инфекция распространилась и на второй глаз, и мальчик полностью ослеп. Наверняка его ждала жизнь в невежестве и бедности (как и большинство слепцов в те времена), но Луи проявил незаурядный ум и тягу к знаниям. Благодаря участию деревенского пастора и школьного учителя Луи ходил в сельскую школу вместе с другими ребятами, а в возрасте десяти лет отправился в Парижский государственный институт для слепых детей.

Разумеется, одна из главных сложностей при обучении незрячих в том, что они не могут читать печатные книги. Основатель этой парижской школы Валентин Гаюи (1745–1822) изобрел систему тисненых выпуклых букв для чтения их на ощупь. Но пользоваться системой было сложно, и вышло только несколько книг, напечатанных таким методом. Гаюи не смог посмотреть глубже. Для него буква А оставалась буквой А. Она должна была выглядеть (ощущаться) как А. (Общаясь на языке световых сигналов, мы пробовали рисовать буквы в воздухе и убедились, что такой прием неработоспособен.) Вероятно, Гаюи не догадался, что некий код, сильно отличающийся от печатного алфавита, оказался бы для незрячих удобнее.

Прообраз такого альтернативного кода возник в достаточно необычном контексте. Шарль Барбье, капитан французской армии, изобрел систему записи под названием écriture nocturne, или «ночная азбука». В ней использовались узоры выпуклых точек и тире на плотной бумаге. Предполагалось, что солдаты могли бы обмениваться в темноте такими записками, когда требовалось соблюдать тишину. Писать точки и тире можно было специальным стилусом, вроде шила. Затем выпуклые точки можно было читать на ощупь. Недостаток системы Барбье заключался в ее чрезмерной сложности. Комбинации точек и тире соответствовали звукам, а не буквам алфавита, поэтому одно слово часто могло шифроваться разными кодами. Система хорошо работала для обмена короткими сообщениями в полевых условиях, но решительно не подходила для сравнительно крупных текстов, тем более книг.

Луи Брайль познакомился с системой Барбье в двенадцатилетнем возрасте. Ему понравились выпуклые точки не только потому, что они легко читались на ощупь, но и потому, что их было просто писать. Ученик в классе, вооружившись бумагой и стилусом, в самом деле мог записывать и читать такие сообщения. Луи Брайль постарался усовершенствовать эту систему, и через три года (когда ему было пятнадцать) в общих чертах составил собственную, основы которой применяются и сегодня. Много лет такая система использовалась лишь в школах, но постепенно вошла в широкое употребление. В 1835 году Брайль подхватил туберкулез, от которого и умер в 1852 году, в возрасте 43 лет.

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

В этой главе мы препарируем код Брайля и разберемся, как он работает. Мы не будем учить код Брайля или что-то запоминать. Мы лишь попробуем на этом примере лучше понять его природу.

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


В настоящее время существуют специальные пишущие машинки – брайлевские принтеры, выбивающие точки брайлевского шрифта на бумаге.

Поскольку книга получилась бы запредельно дорогой, если бы хоть пару страниц набрали шрифтом Брайля, я пользовался нотацией, традиционно применяемой для передачи азбуки Брайля при печати. В такой нотации отображаются все шесть точек в клетке. Жирные точки – это выпуклости на бумаге, мелкие – плоские элементы клетки. Например, в следующем брайлевском символе точки 1, 3 и 5 выпуклые, а 2, 4 и 6 – нет.



На данный момент нас должно заинтересовать, что эти точки двоичны. Любая точка может быть либо выпуклой, либо плоской. Таким образом, шрифт Брайля подчиняется тем же принципам, которые знакомы нам из азбуки Морзе и комбинаторного анализа. Известно, что в клетке шесть точек, и каждая точка может быть плоской или выпуклой, поэтому общее число комбинаций, которые складываются из шести плоских или выпуклых точек, равно 2 × 2 × 2 × 2 × 2 × 2, или 26, или 64.

Как видите, в системе Брайля можно представить 64 уникальных кода.



Если в шрифте Брайля используется менее 64 кодов, логично спросить, почему не все возможные варианты в ходу. Если в шрифте Брайля найдется более 64 возможных кодов, значит, сбоит либо наш разум, либо фундаментальные математические истины из разряда «два плюс два равно четырем».

Приступая к изучению шрифта Брайля, рассмотрим, как в нем записываются строчные буквы латиницы.



Например, английская фраза You and me4 записывается следующим образом.



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

Именно такова основа шрифта Брайля в редакции самого Брайля – как минимум что касается латиницы. Луи Брайль также разработал коды для букв с диакритическими знаками (они часто встречаются во французском языке). Обратите внимание: здесь нет кода для буквы w, которая в классическом французском не используется. (Не волнуйтесь, и эта буква вскоре появится.) Пока мы учли всего 25 из 64 возможных кодов.

Внимательно присмотревшись к вышеприведенным строчкам, можно заметить, что в них прослеживается закономерность. В первой строчке (от a до j) в каждой клетке используются лишь четыре верхние точки: 1, 2, 4 и 5. Второй ряд точно такой же, как первый, но в нем есть и точка 3. Третий ряд подобен первым двум, но в нем мы видим не только точку 3, но и точку 6.

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



Таким образом, фразу You and me сокращенным Брайлем можно записать так.



Вот мы и описали 31 код: пробел без точек, который ставится между словами, и три строки по десять кодов, используемых для обозначения букв и слов. Мы до сих пор и близко не израсходовали 64 теоретически доступных кода. Как мы убедимся, в сокращенном Брайле ни один не остался без дела.

Во-первых, можно использовать коды букв a – j, добавляя к каждому из них выпуклую точку 6. Эти коды применяются в основном для сокращения в слове букв, для буквы w и другого сокращения слов.



* Will – вспомогательный глагол для образования будущего времени.

Например, слово about5 можно записать сокращенным Брайлем вот так.



Во-вторых, можно взять коды букв a – j и «опустить» их так, чтобы использовались лишь точки 2, 3, 5 и 6. Этими кодами обозначаются некоторые знаки препинания и сокращения, в зависимости от контекста.



Первые четыре приведенных кода – это запятая, точка с запятой, двоеточие и точка. Обратите внимание: как открывающая, так и закрывающая скобки обозначаются одним и тем же кодом, а вот коды для открывающей и закрывающей кавычки отличаются.

Пока мы использовали 51 код. Далее приведены шесть кодов, представляющих различные незадействованные комбинации точек 3, 4, 5 и 6. С их помощью записывают сокращения и некоторые дополнительные знаки препинания.



Код ble очень важен: если это не часть слова, то он означает, что следующие далее коды должны интерпретироваться как числа. Числовые коды точно такие же, как и для букв a – j.



Следовательно, нижеприведенная последовательность означает 256.



Если вы следите за нитью повествования, то помните, что до максимума (64) нам остается еще семь кодов. Вот они.



Первый код (выпуклая точка 4) – индикатор ударения. Остальные используются в качестве префиксов при некоторых сокращениях, а также в иных целях. Например, при выпуклых точках 4 и 6 (пятый код в этом ряду) код может означать либо десятичную запятую (для чисел), либо логическое ударение – в зависимости от контекста.

Наконец (если вам не терпится узнать, как в шрифте Брайля записываются заглавные буквы), у нас есть выпуклая точка 6. Это индикатор заглавной буквы. Следующая после такого символа буква будет в верхнем регистре. Например, имя создателя этой системы записывается так.



Здесь индикатор заглавной буквы, буква l, буквосочетание ou, буквы i и s, пробел, еще один индикатор заглавной буквы, а далее – буквы b, r, a, i, l, l и e (на практике эта запись может быть еще короче: отбрасываются две последние буквы, так как они не произносятся).

Итак, мы рассмотрели, как шесть двоичных элементов (точек) дают 64 возможных кода – и не больше. Получается, что многие из этих кодов выполняют двойную работу в зависимости от контекста. Особенно интересны «числовой» и «буквенный» индикаторы (при этом второй отменяет первый). Эти коды меняют семантику других кодов – тех, что следуют за ними: с букв на цифры и обратно с цифр на буквы. Подобные коды часто именуются кодами старшинства или переключения. Они меняют семантику всех последующих кодов до тех пор, пока переключение не будет отменено.

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

Глава 4. Устройство фонарика

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

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

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

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



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

Мы только что сконструировали простую электрическую цепь. Первым делом необходимо отметить, что эта цепь представляет собой круг. Лампочка зажжется лишь в том случае, если контур от батареек к лампочке, далее к переключателю и обратно к лампочке будет непрерывным. Достаточно любого разрыва – и лампочка погаснет. Выключатель нужен для того, чтобы управлять этим процессом.

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

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



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

Необходимо отметить, что вы бы увидели несколько иную картину, будь у вас достаточно мощный микроскоп, позволяющий рассматривать отдельные атомы, но «планетарная» модель довольно удобна.

В атоме, показанном на этой странице, три протона, три электрона и четыре нейтрона, значит, перед нами атом лития. Литий – это один из 118 известных элементов, каждый из которых обладает собственным атомным числом от 1 до 118. Атомное число указывает, сколько протонов в ядре у каждого атома этого элемента, а также сколько электронов в таком атоме. Атомное число лития равно трем.

Атомы могут образовывать химические связи с другими атомами, объединяясь в молекулы. Как правило, молекулы обладают совсем иными свойствами, нежели атомы, из которых они состоят. Например, в молекуле воды два атома водорода и один атом кислорода (поэтому химическая формула воды H2O). Очевидно, вода существенно отличается как от водорода, так и от кислорода. Молекулы поваренной соли состоят из атома натрия и атома хлора, но ни одно из этих веществ не показалось бы вам особо аппетитным, если бы его добавили в картошку фри в чистом виде.

Водород, кислород, хлор, натрий – это всё элементы. Вода и соль – соединения. Однако водно-соляной раствор – это смесь, а не соединение, поскольку в растворе вода и соль сохраняют присущие им свойства.

Количество электронов в атоме обычно равно количеству протонов. Случается, что электроны вышибаются из атома. Именно так и возникает электричество.

Слова «электрон» и «электричество» происходят от древнегреческого ηλεκτρον (читается [электрон]).

Может показаться, что это слово означает «крошечная невидимая штука». На самом деле ηλεκτρον в переводе с греческого – «янтарь», прозрачная окаменевшая древесная смола. Такая необычная этимология возникла потому, что древние греки пробовали натирать янтарь шерстяной тканью, а при этом возникает статическое электричество. Когда мы потираем янтарь шерстяной тряпочкой, она вытягивает из камня электроны. В шерсти возникает избыток электронов по сравнению с протонами, а в янтаре электронов становится слишком мало. Более современный подобный эксперимент связан с обычным ковром: если пошаркать по нему, палас захватывает электроны из подошв обуви.

У протонов и электронов есть свойство под названием «электрический заряд». Считается, что у протонов положительный заряд (+), а у электронов – отрицательный (–). Нейтроны нейтральны, у них нет заряда. Хотя мы и обозначаем протоны и электроны символами «плюс» и «минус», эти символы в данном случае не имеют арифметической семантики и не означают, что у протонов есть что-то, чего у электронов нет. Противоположные характеристики проявляются именно в том, как протоны и электроны соотносятся друг с другом.

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

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

Чтобы подступиться к сильному взаимодействию, требуется расщепить ядро, в результате чего высвободится ядерная энергия. А мы просто балуемся с электронами, чтобы получить электричество.

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

Электричество в проводах фонарика, разумеется, гораздо благовоспитаннее, чем в искре или в молнии. Лампочка горит ровно и непрерывно6, поскольку электроны не просто скачут с места на место. Когда один атом в электрической цепи теряет электрон, отдавая его другому атому, он сразу же захватывает электрон от соседнего атома, а тот – от следующего и т. д. Электричество в цепи – это переход электронов от атома к атому.

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

Почти любому известно хотя бы кое-что о типах батареек, используемых в фонариках:


• батарейки цилиндрические бывают разных размеров, например D, C, A, AA, AAA;

• независимо от размера на любой батарейке указана величина 1,5 вольта;

• один кончик батарейки плоский, на нем стоит знак «–»; на другом конце небольшой выступ и знак «+»;

• если вы хотите, чтобы прибор работал нормально, правильно вставляйте батарейки, чтобы плюсы и минусы располагались верно;

• мы полагаем, что батарейки каким-то хитрым образом «дают» электричество.


Во всех батарейках происходят химические реакции: либо одни молекулы распадаются на другие, либо одни молекулы соединяются с другими, образуя третьи. Химические вещества в батарейке подбираются так, чтобы в результате реакции между ними с минусового конца образовывались свободные электроны (этот конец называется «отрицательная клемма» или «катод»), которые так нужны на плюсовом конце батарейки (он же «положительная клемма» или «анод»). Таким образом химическая энергия преобразуется в электрическую.

Химическая реакция может протекать лишь при условии, что лишние электроны каким-то образом будут извлекаться с отрицательного полюса батареи и доставляться обратно к положительному. Если батарейка ни к чему не подключена, ничего особенного в ней происходить не будет. (На самом деле химическая реакция там все-таки идет, но очень медленно.) Химические реакции разгоняются лишь при наличии электрического тока, несущего электроны с отрицательного конца батарейки к положительному. Электроны движутся по этой цепи против часовой стрелки7.



В этой книге красным цветом обозначаются провода, по которым течет электричество.

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



Обратите внимание: обе батарейки ориентированы в одном и том же направлении. Положительный полюс нижней батарейки принимает электроны с отрицательного полюса верхней батарейки, как будто мы сложили из двух маленьких батареек одну большую, общая мощность которой составляет не 1,5, а 3 вольта.

Если повернуть одну из батареек в противоположную сторону, то электрическая цепь будет разорвана.



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

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

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

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

Некоторые вещества проводят электричество существенно лучше, чем другие. Это связано со строением атома. Электроны вращаются вокруг ядра на разных энергетических уровнях, которые называются оболочками или орбиталями. Если у атома на внешней оболочке всего один электрон, он легко его отдает, – как раз это и нужно для передачи электричества. Такие вещества хорошо проводят электричество, поэтому их называют проводниками. Лучшие проводники – медь, серебро и золото. Не случайно эти элементы расположены в одном и том же столбце периодической системы. Медь – самое распространенное сырье для изготовления проводов.

Свойство, противоположное электропроводимости, называется сопротивлением. Некоторые вещества сильнее сопротивляются току, нежели другие, – это резисторы. Если вещество обладает очень высоким сопротивлением, практически не проводит электричество, его называют диэлектриком (изолятором). Резина и пластик – хорошие изоляторы, вот почему из них часто делают оболочку для проводов. Ткань и дерево, сухой воздух тоже хороши в таком качестве. Однако при достаточно высоком напряжении практически любой материал приобретает электропроводимость.

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

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

Я уже говорил о напряжении, но не дал определения этому явлению. Напряжение батарейки составляет 1,5 вольта. Что это значит? Напряжение, измеряемое в вольтах (единица напряжения названа так в честь графа Алессандро Вольта (1745–1827), который в 1800 году сконструировал первую батарею), – это одна из самых сложных концепций в элементарной электротехнике. Напряжение описывает потенциал для выполнения работы. Напряжение существует независимо от того, подключены ли к батарее какие-либо приборы.

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

Гораздо проще определить, что такое ток. Сила тока зависит от того, сколько электронов мчится по проводнику. Сила тока измеряется в амперах, названных так в честь Андре Ампера (1775–1836). Чтобы достичь силы тока в один ампер, через поперечное сечение проводника нужно пропустить 6 240 000 000 000 000 000 электронов в секунду.

Здесь уместна аналогия с водой, текущей по трубам. Ток подобен объему воды, проходящему через трубу в единицу времени, напряжение – давлению воды. Сопротивление можно сравнить с шириной трубы: чем уже труба, тем выше сопротивление. Таким образом, чем выше давление, тем больше воды проходит через трубу, чем меньше сечение трубы, тем меньше воды через нее течет. Объем воды, текущей через трубу (ток) в единицу времени прямо пропорционален давлению воды (напряжению) и обратно пропорционален толщине трубы (сопротивлению).

Электротехника позволяет вычислить силу тока, если известны напряжение и сопротивление. Сопротивление – способность вещества тормозить поток электронов – измеряется в омах. Эта единица названа в честь Георга Ома (1789–1854), который также сформулировал знаменитый закон Ома:

I = E / R,

где I традиционно обозначает силу тока в амперах, E – электродвижущая сила, ЭДС (это первая буква в английском словосочетании electromotive force), а R – сопротивление.

Так, рассмотрим батарею, которая просто лежит в покое и ни к чему не подключена.



ЭДС E равна 1,5 вольта. Это потенциал для выполнения работы8. Поскольку между плюсовой и минусовой клеммой лишь воздух, сопротивление получается очень высоким, а значит, сила тока равна 1,5 вольта, деленному на очень большое число. Таким образом, ток практически нулевой.

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



Перед вами короткое замыкание. ЭДС по-прежнему равна 1,5 вольта, но сопротивление очень низкое. Узнаем силу тока, разделив 1,5 вольта на очень малое значение. Сила тока получится огромной. По проводу побежит целая уйма электронов. На практике фактическое значение силы тока ограничено физическим размером батареи. Вероятно, батарея просто окажется не в состоянии выдать ток такой силы, и напряжение упадет ниже 1,5 вольта. Если батарея окажется достаточно велика, то провод разогреется, поскольку электрическая энергия станет превращаться в тепловую. Если провод нагреется слишком сильно, он может раскалиться и даже расплавиться.

Большинство электрических цепей попадает в промежуток между этими двумя крайностями. Их можно символически изобразить следующим образом.

Любой электротехник понимает, что зубчатая линия на этом рисунке обозначает резистор. В данном случае показано, что сопротивление в электрической цепи среднее – не высокое, не низкое.



Если сопротивление у провода низкое, он может сильно нагреться и раскалиться. Так устроена лампа накаливания. Честь создания электрической лампы накаливания обычно приписывается самому знаменитому американскому изобретателю Томасу Эдисону (1847–1931), но по состоянию на 1879 год, когда он запатентовал электролампочку, принцип ее работы был хорошо известен, и другие ученые тоже работали над этой проблемой9.

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

В типичном фонарике – две батарейки с последовательным соединением. Общее напряжение составляет три вольта. Сопротивление типичной лампочки из карманного фонарика – четыре ома. Следовательно, чтобы узнать силу тока в такой лампочке, делим три вольта на четыре ома и получаем 0,75 ампера, или 750 миллиампер. Таким образом, каждую секунду через лампочку пролетает 4 680 000 000 000 000 000 электронов.

Краткая проверка на практике: если попытаться измерить сопротивление лампочки карманного фонарика при помощи омметра, результат получится гораздо ниже четырех омов. Сопротивление вольфрама зависит от температуры, и по мере нагревания лампочки оно возрастает.

Вероятно, вы знаете, что на бытовых лампочках пишут, сколько в них ватт. Эта единица названа в честь Джеймса Уатта (1736–1819), прославившегося своей работой над паровым двигателем. Ватт – это единица мощности (P), которая вычисляется по формуле:

P = E × I.

Показатели нашего фонарика – три вольта и 0,75 ампера, то есть мы имеем дело с лампочкой мощностью 2,25 ватта.

Возможно, у вас в комнате горит стоваттная лампочка, которая рассчитана на бытовое напряжение 120 вольт. Следовательно, сила тока, идущего через такую лампочку, равна 100 ватт разделить на 120 вольт, то есть примерно 0,83 ампера. Таким образом, сопротивление стоваттной лампы накаливания равно 120 вольт разделить на 0,83 ампера – примерно 144 ома.

Кажется, мы проанализировали все элементы фонарика: батарейки, провода, лампочку. Но забыли о самом важном!

Да, еще выключатель. От положения выключателя зависит, есть ли ток в электрической цепи. Когда ток идет, говорят, что фонарик включен, или контур замкнут. Когда фонарик выключен (контур разомкнут), ток идти не может. Таким образом, провод и дверь в некотором смысле противоположны: когда дверь закрыта (замкнута), через нее нельзя пройти, а в случае с проводом всё наоборот.

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

Глава 5. Заглядывая за угол

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

Проблема в том, что окно вашей спальни и окно спальни нового друга не обращены друг к другу. Дома стоят на одной улице, но окна смотрят в одну и ту же сторону. Если на улице не получится каким-то образом установить систему зеркал, азбукой Морзе через окно не пообщаешься.

Или все же пообщаешься?

Вероятно, к тому моменту вы уже что-то узнали об электричестве, так что решаете собрать собственные фонарики из батареек, лампочек, выключателей и проводов. Первым делом вы прямо в спальне соединяете батарейки и выключатель. Два провода тянутся из окна через забор в спальню вашего друга, где он подключает их к лампочке.


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



А так – включенный (замкнутый).



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



Теперь вы можете обмениваться сообщениями при помощи азбуки Морзе.

У вас получился один «дальнобойный» фонарик; значит, можно подключить второй, которым будет пользоваться ваш друг.



Поздравляем! Вы только что соорудили двунаправленный телеграф. Как видите, здесь две одинаковые электрические цепи, которые совершенно не зависят друг от друга и нигде одна с другой не соединяются. Теоретически вы можете отправлять сообщение в момент, когда друг отправляет его вам (хотя это серьезная умственная нагрузка – отправлять и читать сообщения одновременно).

Возможно, вы догадаетесь, что длину проводов можно сократить на четверть, выстроив такую конфигурацию.



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

Такое соединение называется «с общим проводом». В этой схеме общий провод проложен от левой оконечности, где соединены левая лампочка и батарейка, до правой, где соединены правая лампочка и батарейка. Эти подключения обозначены точками.

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



В другую часть схемы электричество не попадает: электронам туда попросту не добраться.

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



Когда вы одновременно с другом пытаетесь передать сигналы, в некоторые моменты оба переключателя выключены, в других случаях один включен, а второй выключен, в третьих – оба включены. Тогда направление тока в цепи выглядит так.



По общему проводу ток не идет.

Когда мы соединяем две цепи в одну при помощи общего провода, у нас остается три провода вместо четырех, и длина всей проводки уменьшается на 25 %.

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

Вот какой фокус: как только вы оборудовали общую часть цепи, на этом отрезке уже необязательно использовать провод; его можно заменить чем-нибудь еще. Например, шаром диаметром 12 тысяч километров, состоящим из металла, камней, воды и органических веществ. Этот гигантский шар – планета Земля.

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

Чтобы задействовать Землю в качестве проводника, мало просто воткнуть провод в грядку с помидорами. Нужно устройство, которое обеспечит хороший контакт, – я имею в виду, что у проводника должна быть обширная поверхность. В данном случае хорошо подойдет медный прут длиной хотя бы 2,5 метра и примерно 1,5 сантиметра в диаметре. Тогда мы получим площадь контакта проводника с землей, равную 1200 см2. Такой прут можно загнать в землю кувалдой, а затем подключить к нему провод. Если у вас дома проложены медные водопроводные трубы, выходящие из земли где-то за домом, провод можно подсоединить к подобной трубе.

Термин «заземление» немного неудачный, поскольку именно им обозначается и тот элемент цепи, который мы выше назвали общим проводом. В этой главе (если не будет указано иное) «заземление» означает физическое соединение с грунтом.

На схемах электрических цепей Земля обозначается так.



Электрики пользуются таким символом, потому что им лень рисовать саженный медный прут, закопанный в землю.

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



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



Когда вы включите систему, электричество потечет так.



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

Возможно, вы также пожелаете изобразить электроны, вылетающие из саженного медного прута, закопанного на заднем дворе вашего друга.

Если учесть, что Земля в данном случае выполняет точно такую же функцию для тысяч электрических цепей по всему миру, возможен вопрос: откуда электроны знают, куда именно лететь? Разумеется, не знают. В данном случае удобнее описать Землю при помощи другой метафоры.

Да, Земля – огромный проводник, но ее можно рассматривать и как хранилище, и как источник электронов. Земля полна электронами, как океан – каплями воды. Земля – не только неисчерпаемый источник электронов, но и огромный «сток» для этих частиц.

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

Обратите внимание: на двух предыдущих схемах батарейка заземлена через отрицательную клемму.



Я больше не буду рисовать заземленную батарейку. Вместо этого стану писать заглавную букву V, которая означает напряжение. Теперь однонаправленный телеграф с лампочкой выглядит так.



V означает «напряжение» и «вакуум». Считайте, что V – это электронный вакуум, а Земля – океан электронов. Электронный вакуум тянет электроны из Земли через электрическую цепь, тем временем совершая работу (например, зажигая лампочку).

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

В главе 4 мы отметили, что электрические цепи закольцованы. Наша новая цепь совершенно не похожа на кольцо. Однако она все равно закольцована. Можно заменить V на батарейку, заземленную через отрицательную клемму, а затем нарисовать провод между всеми точками, где стоит символ заземления. Получится такая же схема, как и приведенная в начале этой главы.

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



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

Итак, мы рассмотрели важный этап в развитии телекоммуникаций. Ранее мы могли общаться при помощи азбуки Морзе, но только по прямой, в пределах видимости, и только на таком расстоянии, на какое добивает луч фонарика.

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

Нет, в принципе, не совсем так. Пусть медь и очень хороший проводник, она неидеальна. Чем длиннее провода, тем выше их сопротивление. Чем выше сопротивление, тем слабее проходящий по ним ток, чем слабее ток – тем тусклее светит лампочка.

Итак, насколько длинные провода мы можем протянуть? Зависит от ситуации. Допустим, мы работаем с исходной двунаправленной конструкцией на четыре провода, без заземления и общего провода, используем батарейки от фонарика, а также лампочки. Можно для начала приобрести акустический кабель 20-го калибра. Такой кабель обычно применяется для подключения микрофона к стереосистеме. В нем два провода, так что он хорошо подойдет и для двунаправленного телеграфа. Если между вашей комнатой и комнатой друга меньше 15 метров, потребуется всего одна катушка провода.

Толщина провода измеряется по системе AWG (American Wire Gauge, американский калибр проводов)10. Чем меньше калибр, тем толще провод, соответственно тем ниже его сопротивление. Диаметр провода 20-го калибра – около 0,8 миллиметра, а сопротивление – 10 омов на 300 метров либо один ом на удвоенное расстояние между комнатами.

Неплохо, но что делать, если бы мы протянули провод на полтора километра? Общее сопротивление такого провода составило бы более 100 омов. Как вы помните, сопротивление нашей лампочки составляло всего четыре ома. По закону Ома можно рассчитать, что сила тока, который потечет по такой цепи, составит уже не 0,75 ампера (три вольта, деленные на четыре ома), а менее 0,03 ампера (три вольта, деленные более чем на 100 омов). Наверняка лампочка от такого низкого тока не загорится. Хороший выход – взять провод потолще. Но это может выйти дороже. Провода 10-го калибра потребуется вдвое больше, поскольку он одножильный, толщина его составляет около 2,54 миллиметра, но сопротивление – всего около пяти омов на 1,6 километра. Другое решение – увеличить напряжение и взять лампочки с гораздо более высоким сопротивлением. Например, стоваттная лампочка, освещающая вашу комнату, рассчитана на работу в сети напряжением 120 вольт и имеет сопротивление около 144 омов. В таком случае сопротивление проводов в меньшей степени отразится на всей нашей схеме.

Именно с такими проблемами столкнулись инженеры, которые 150 лет назад прокладывали первые телеграфные системы между Америкой и Европой. Независимо от толщины проводов и уровня напряжения, телеграфный провод просто невозможно протянуть на неограниченное расстояние. Согласно имевшейся схеме, работоспособная система могла охватить максимум несколько сотен километров, что несравнимо меньше тех тысяч километров, которые пролегают между Нью-Йорком и Калифорнией.

Решить проблему удалось, отказавшись от лампочек и сконструировав простые «щелкающие» телеграфы прошлого века. Получилось простое и неброское устройство, на основе которого впоследствии были созданы полноценные компьютеры.

Глава 6. Телеграфы и реле

Сэмюэл Морзе родился в 1791 году в городе Чарльзтауне. Сейчас это северо-восточная часть Бостона. К моменту рождения Морзе минуло уже два года, как ратифицировали Конституцию США. Шел первый президентский срок Джорджа Вашингтона, в России правила Екатерина Великая. Людовик XVI и Мария-Антуанетта спустя два года будут обезглавлены во время Французской революции. В 1791 году Моцарт завершил свою последнюю оперу «Волшебная флейта» и в тот же год умер в возрасте 35 лет.

Морзе получил образование в Йеле и изучал искусство в Лондоне. Он стал успешным портретистом. Портрет генерала Лафайета (1825) кисти Морзе до сих пор экспонируется в Ратуше Нью-Йорка. В 1836 году Морзе баллотировался в мэры Нью-Йорка как независимый кандидат и получил 5,7 % голосов. Кроме того, он был одним из первых, кто всерьез увлекался фотографией. Морзе учился у самого Луи Дагера и сделал одни из первых дагеротипов в Америке. В 1840 году он обучил этому искусству 17-летнего Мэтью Брэди, который вместе с коллегами впоследствии создал один из самых запоминающихся снимков Гражданской войны в США, портреты Авраама Линкольна и Сэмюэла Морзе. Все это лишь ремарки к его разносторонней карьере. В наши дни Сэмюэл Морзе наиболее известен как изобретатель телеграфа и азбуки, названной в его честь.

Мгновенная связь в глобальных масштабах, к которой мы так привыкли, – относительно недавнее изобретение. В начале XIX века можно было общаться либо в реальном времени, либо дистанционно, но то и другое сразу было невозможно. Дистанция реального общения была ограничена силой голоса (никаких звукоусилителей не существовало) и зоркостью собеседника (правда, вас могли рассматривать в подзорную трубу). Общаться на больших расстояниях можно было по переписке; для доставки писем требовались время и транспорт: лошади, поезда или корабли.

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

Идея телеграфа (в буквальном переводе с греческого «пишу далеко») в начале XIX века определенно витала в воздухе, и кроме Морзе за нее пытались браться другие изобретатели. Морзе приступил к экспериментам в 1832 году. В принципе, идея электрического телеграфа проста: на одном конце провода проделываем какие-то манипуляции, эффект которых наблюдается на другом конце. Именно это и получилось у нас, когда мы конструировали дальнобойный фонарик. Однако Морзе не мог пользоваться лампочкой в качестве сигнального устройства, поскольку саму лампочку изобрели лишь в 1879 году. Вместо этого он задействовал явление электромагнетизма.

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



Электромагнит – основа телеграфа. Когда мы включаем или выключаем рычаг с одной стороны цепи, эффект наблюдается на другой стороне.

Первые телеграфы Морзе были сложнее более поздних моделей. Морзе считал, что телеграф должен выводить какую-то информацию на бумаге, как потом будут говорить компьютерщики, создавать физическую копию. Естественно, это не обязательно должны быть слова, поскольку это слишком сложно. Но что-то на бумаге нужно записывать, будь то каракули или точки и тире. Обратите внимание: Морзе не мог выйти из плоскости и думал о бумаге и чтении, точно как Валентин Гаюи полагал, что в книгах для слепых должны быть выпуклые буквы алфавита.

Хотя Сэмюэл Морзе уже в 1836 году уведомил патентное бюро о том, что изобрел рабочую модель телеграфа, лишь в 1843 году ему удалось добиться разрешения на публичную демонстрацию этого устройства в Конгрессе. Исторический день наступил 24 мая 1844 года, когда телеграфная линия связала Вашингтон и Балтимор и по телеграфу удалось успешно передать библейскую фразу: «Чудны дела Твои, Господи».

Обычный телеграфный «ключ» для передачи ссобщений выглядел примерно так:



Несмотря на вычурный вид, это был просто переключатель, оптимизированный для максимально скоростной работы. Чтобы подолгу работать с таким ключом, его было удобнее удерживать между большим, указательным и средним пальцами и стучать им вверх-вниз. Короткий удар ключом соответствовал точке из азбуки Морзе, длительное нажатие – тире.

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

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



При нажатии телеграфного ключа электромагнит в клопфере опускал подвижную планку и делал характерный «клик». Когда ключ отпускали, планка отскакивала обратно и издавала звук «клак». Быстрое «клик-клак» соответствовало точке, более долгое «клик-клак» – тире.

Ключ, клопфер, батарею и несколько проводов можно подключить друг к другу, как в случае со световым телеграфом, о котором мы говорили в предыдущей главе.



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

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



Для двунаправленной связи нам просто потребуются еще один ключ и передатчик. Примерно такое устройство мы и собирали.

Именно с изобретения телеграфа начинается эпоха современных телекоммуникаций. Впервые людям удалось общаться с собеседником за пределами видимости и слышимости, причем гораздо оперативнее, чем при отправке почты на галопирующей лошади. Гораздо интереснее, что в этом изобретении применялся двоичный код. В более современных средствах кабельной и беспроводной телекоммуникации (телефон, радио, телевизор) от двоичного кода отказались, и вновь он вошел в употребление с возникновением компьютеров, компакт-дисков, цифровых видеодисков, цифрового спутникового телевещания и телевидения высокого разрешения.

Телеграф Морзе превзошел другие модели отчасти потому, что хорошо работал при помехах на линии. Как правило, провод между ключом и клопфером оставался функционален. Другие телеграфные системы были не столь неприхотливы. Я уже упоминал, что большая техническая проблема, связанная с телеграфом, заключается в сопротивлении длинных проводов. Хотя на некоторых телеграфных линиях использовалось напряжение до 300 вольт, и они нормально работали на расстоянии до 480 километров, неограниченно длинных проводов не бывает.

Решение сконструировать систему ретрансляторов очевидно. Через каждые 320 километров можно усадить оператора, дать ему ключ и клопфер и поручить: «Получил сообщение – передай его следующему».

Теперь представьте, что телеграфная компания пригласила вас на работу в качестве такого оператора. Посадили вас где-нибудь в глуши между Нью-Йорком и Калифорнией в хижине, где есть только стол и стул. Через восточное окно в комнату протянут провод, подключенный к клопферу. Телеграфный ключ запитан от батареи, а из батареи в западное окно протянут второй провод. Ваша задача – принимать входящие сообщения из Нью-Йорка и пересылать их в Калифорнию.

Поначалу вы предпочитаете дождаться целостного сообщения, а затем переслать его. Записываете буквы, соответствующие щелчкам клопфера, а когда сообщение закончится – пересылаете, отстукивая ключом. Рано или поздно вы догадаетесь, что сообщение удобнее транслировать прямо в процессе получения, не записывая его целиком. Так экономится время.

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



Теперь все работает само, а вы можете устроить свободный вечер и пойти порыбачить.

Интересно нафантазировано. В действительности Сэмюэл Морзе еще на самом раннем этапе концептуально представлял себе такое устройство. Мы изобрели устройство под названием повторитель, или реле. Реле напоминает клопфер, где входящий ток запитывает магнит, тянущий металлический рычаг. Однако рычаг – это элемент переключателя, соединяющего батарею с исходящим проводом. В таком случае слабый входящий ток «усиливается», и исходящий ток получается гораздо значительнее.

Схема реле выглядит так.



Когда входящий ток активирует электромагнит, последний подтягивает гибкую металлическую ленту, действующую как переключатель, пускающий исходящий ток.



Итак, телеграфный ключ, клопфер и реле соединяются примерно следующим образом.



Реле – замечательное устройство. Безусловно, это переключатель, но такой, который переводится из состояния «включен» в состояние «выключен» и обратно не человеческой рукой, а силой тока. При помощи такого прибора можно делать удивительные вещи, а телеграф в существенной степени позволяет смоделировать компьютер.

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

Глава 7. Наши десять цифр

Идея, что язык – просто код, вполне логична. Многие как минимум пытались выучить иностранный язык в старших классах, поэтому сложно поспорить, что кошка в других языках может называться cat, gato, chat, Katze, kot или καττα.

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

1 2 3 4 5 6 7 8 9 10

Не потому ли математику называют универсальным языком?

Несомненно, числа – самый абстрактный код, с которым приходится иметь дело в повседневной жизни. Видя число, мы не пытаемся его мгновенно с чем-то соотнести.

3

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

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

Для начала давайте расстанемся с мыслью, что в числе 10 есть нечто особенное. Неудивительно, что в большинстве цивилизаций сложились системы счисления на основе числа 10 (или 5). С глубокой древности люди считали на пальцах. Если бы у человеческой особи было восемь или двенадцать пальцев, то все счетные системы были бы немного иными.

Именно поэтому система счисления с основанием 10, также именуемая десятеричной, выбрана совершенно произвольно. Мы придаем десятке чисел поистине магическое значение и придумали для нее особые названия. Десять дней образуют декаду, десять десятилетий – век, десять веков – тысячелетие. Тысяча тысяч – это миллион, тысяча миллионов – миллиард. Все эти числа являются степенями числа 10.

101 = 10

102 = 100

103 = 1000 (тысяча)

104 = 10 000

105 = 100 000

106 = 1 000 000 (миллион)

107 = 10 000 000

108 = 100 000 000

109 = 1 000 000 000 (миллиард)

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


Наконец человек, чья работа заключалась в рисовании уток, подумал: «Зачем рисовать четырех уток? Не изобразить ли одну и обозначить, что на самом деле уток четыре, скажем, черточками?»



Когда потребовалось нарисовать 27 уток, черточки выглядели нелепо.



Подумалось: «Должен быть другой способ, лучше», – так появилась система чисел.

Из всех древнейших числовых систем до сих пор в ходу римские цифры. Они встречаются на циферблатах, ими выбивают даты на памятниках, нумеруют некоторые страницы в книгах, используют при подсчете некоторых элементов и – что наиболее раздражает – при указании информации об авторских правах в кинофильмах. (Иногда чтобы ответить на вопрос, в каком году был снят фильм, нужно молниеносно расшифровать какие-нибудь MCMLIII в хвосте титров.)

Двадцать семь уток римскими цифрами будет так.



Принцип довольно прост: X означает 10 черточек, V – пять.

Вот римские цифры, сохранившиеся до наших дней.

I V X L C D M

I – это единица; она похожа на черточку или один поднятый палец. V – это пятерка; возможно, этим символом обозначалась ладонь. Из двух V составляется X, то есть десятка.

L – это пятьдесят, C – буква, с которой начинается латинское centum, – сто, D – пять сотен, M – первая буква в слове mille – тысяча.

Хотя мы, возможно, с этим не согласимся, но на протяжении веков считалось, что римские цифры удобны для сложения и вычитания, именно поэтому они так долго использовались в Европе при ведении бухгалтерии. Действительно, при сложении двух римских чисел просто выписываются рядом все символы из двух этих чисел, а затем применяется всего несколько правил: пять I образуют V, две V–X, пять X–L и т. д.

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

Цифры, которыми мы пользуемся сегодня, называются индо-арабскими. Они возникли в Индии, но были занесены в Европу арабскими математиками. Особенно прославился персидский математик Мухаммад ибн Муса аль-Хорезми (от имени которого происходит слово «алгоритм»), написавший около 825 года книгу по алгебре, где пользовался индийскими цифрами. Эта книга была переведена на латынь около 1120 года, оказала большое влияние на Европу и стимулировала переход с римских цифр на современные.

Индо-арабская система чисел отличалась от более ранних.


• Индо-арабская система называется позиционной, то есть любая цифра может обозначать в ней разное количество в зависимости от того, в какой части числа стоит. Положение цифры в числе не менее (и даже более) важно, чем значение самой цифры. И в 100, и в 1 000 000 всего по одной единице, но всем известно, что миллион гораздо больше сотни.

• Практически во всех ранних системах счисления было нечто, чего нет в индо-арабской системе, а именно: отдельный символ для обозначения десятки. В нашей системе счисления такой символ отсутствует.

• С другой стороны, практически во всех ранних числовых системах отсутствовало кое-что, имеющееся в индо-арабской системе и, по сути, более важное, чем символ десятки, – символ нуля.


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

Вся структура индо-арабских чисел проясняется, если обратить внимание, как мы их произносим. Например, 4825: «Четыре тысячи восемьсот двадцать пять». Это означает:

четыре тысячи,

восемь сотен,

два десятка

и еще пять.

Либо можно разложить это число на компоненты, например:

4825 = 4000 + 800 + 20 + 5.

Или еще мельче, вот так:

4825 = 4 × 1000 +

8 × 100 +

2 × 10 +

5 × 1.

Или, воспользовавшись степенями десятки, записать следующее:

4825 = 4 × 103 +

8 × 102 +

2 × 101 +

5 × 100.

Напоминаю: любое число в степени 0 равно единице.

Каждая позиция в многозначном числе имеет определенное значение, как показано на следующей схеме. В семи окошках можно записать любое число от 0 до 9 999 999.



Каждая позиция соответствует степени десятки. Специального символа для десятки не требуется, поскольку 1 просто ставится в нужную позицию, а 0 используется в качестве символа-заполнителя.

Самое замечательное в данном случае в том, что дробные величины, обозначаемые цифрами после десятичной запятой, подчиняются той же закономерности. Число 42 705,684 равно:

4 × 10 000 +

2 × 1000 +

7 × 100 +

0 × 10 +

5 × 1 +

6 ÷ 10 +

8 ÷ 100 +

4 ÷ 1000.

Это число можно записать и без деления:

4 × 10 000 +

2 × 1000 +

7 × 100 +

0 × 10 +

5 × 1 +

6 × 0,1 +

8 × 0,01 +

4 × 0,001.

Или при помощи степеней десятки:

4 × 104 +

2 × 103 +

7 × 102 +

0 × 101 +

5 × 100 +

6 × 10–1 +

8 × 10–2 +

4 × 10–3.

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

Известно, что 3 плюс 4 равно 7. Аналогично 30 плюс 40 равно 70, 300 плюс 400 равно 700 и 3000 плюс 4000 равно 7000. В этом и заключается красота индо-арабской системы. Складывая сколь угодно длинные десятеричные числа, мы фактически решаем эту задачу поэтапно. На каждом этапе мы всего лишь складываем однозначные числа. Именно поэтому кто-то давным-давно заставлял вас запоминать таблицу сложения.



Найдите в верхнем ряду и в левом столбце два числа, которые хотите сложить. Следуйте от них по прямой к центру, пока линии не пересекутся, и получите сумму. Например, 4 плюс 6 равно 10.

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



Главная прелесть позиционной нотации не в том, как хорошо она работает, а в том, как хорошо она применима в системах счисления, основанных не на десятке. Наша система счисления кому-то может показаться неудобной. Например, у большинства героев-мультяшек всего по четыре пальца на руке (или на лапе), поэтому им было бы сподручнее пользоваться системой с основанием 8. Довольно интересно следующее: большая часть правил, известных нам по десятеричной системе, вполне применима и в восьмеричной.

Глава 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ВОСЕМЬ, и все это – степени двойки. Всякий раз при умножении степени двойки на степень двойки мы получаем еще одну степень двойки.

В следующей таблице даны некоторые степени двойки в десятеричном и восьмеричном представлении.



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

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



Следовательно, восьмеричное число 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. Это совершенно не влияет на значение, а служит исключительно для красоты. В следующей таблице перечислены первые шестнадцать двоичных чисел и их десятичные эквиваленты.



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

• в крайнем правом столбце – 0 и 1;

• во втором столбце справа – два 0 и две 1;

• в следующем столбце – четыре 0 и четыре 1;

• в крайнем левом столбце – восемь 0 и восемь 1.


В этом есть порядок, не так ли? Действительно, вы можете легко написать следующие шестнадцать двоичных чисел, просто повторив первые шестнадцать и добавив 1 в начале.



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

При записи больших десятичных чисел мы используем запятые через каждые три знака для облегчения их восприятия11. Например, если вы увидите число 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)12 осознал, что в будущем словосочетание «двоичная цифра» (binary digit), вероятно, приобретет гораздо большее значение – по мере распространения компьютеров. Он решил создать новое, более короткое слово, чтобы заменить эти громоздкие пять слогов, и рассматривал такие варианты, как bigit и binit, но остановился на коротком, простом, элегантном и просто замечательном слове bit («бит»).

Глава 9. За битом бит

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

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

Не менее информативно, нежели отсутствие или наличие желтой ленточки (разве что не столь поэтично), сработал бы дорожный знак, поставленный во дворе, например «Путь открыт» или «Въезд запрещен». Или табличка на двери «Закрыто» или «Открыто». Или фонарик на окне – включенный или выключенный.

Если вам нужно просто сказать «да» или «нет», то способов хватает. Для этого не надо произносить ни одной фразы, слова, даже буквы. Необходим всего один бит, то есть 0 или 1.

Как мы узнали в предыдущих главах, десятеричная система, которой мы пользуемся при подсчете предметов, на самом деле ничем не примечательна. Ясно, что мы пользуемся системой с основанием 10, так как у нас 10 пальцев на руках. Мы могли бы с тем же успехом использовать систему с основанием 8 (будь мы мультяшками), 4 (будь мы омарами) или даже 2 (если бы мы были дельфинами).

Однако двоичная система счисления все-таки особенная. Дело в том, что это простейшая возможная система счисления. В двоичной системе всего две цифры: 0 и 1. Если нам нужно что-то проще двоичной системы, придется избавиться от 1, и останется только 0. Имея всего лишь 0, ничего не сделаешь.

Слово «бит» – сокращение от английского выражения binary digit («двоичная цифра»). Пожалуй, это одно из симпатичнейших слов в компьютерной терминологии. В английском языке у слова bit есть и общеупотребительное значение – «кусочек, небольшая часть», и это значение нам отлично подходит, поскольку один бит – двоичная цифра, мельчайший фрагмент информации.

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

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

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

«Запомните, дети, – слышал весь мир, // Как в полночь глухую скакал Поль Ревир…» – писал Генри Лонгфелло. Возможно, он исторически недостоверно описал поступок Поля Ревира, предупредившего американских колонистов о вторжении британцев, однако эти стихи замечательно демонстрируют, как можно передать важную информацию при помощи битов.

 
Он другу сказал: «Я сигнала жду.
Коль ночью из города наступать
Начнут британцы, ты дай мне знать,
На Северной церкви зажги звезду, –
Одну, если сушей, а морем – две»13.
 

Итак, Ревир дал другу два фонаря. Если британцы вторгнутся по суше, друг зажжет на колокольне один, если высадятся с моря – то зажжет оба.

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

Допустим, два фонаря висят на колокольне всегда. Как правило, они не горят.


Значит, британцы пока не наступают. Если зажжен один фонарь, значит, британцы наступают по суше, если горят оба, – высаживаются с моря.



Каждый фонарь – это один бит. Зажженный фонарь равен единичному биту, незажженный – нулевому биту. Тони Орландо показал, что для описания любой из двух возможностей достаточно всего одного бита. Если бы Поль Ревир должен был оповестить людей лишь о том, вторгаются британцы или нет (а не откуда именно), то хватило бы и одного фонаря. Фонарь горел бы в случае нападения и был бы потушен, если бы предстоял еще один спокойный вечер.

Чтобы описать одну из трех возможностей, требуется два фонаря. При наличии второго фонаря и двух битов уже можно описать четыре возможности:

00 = британцы пока не наступают;

01 = британцы наступают с суши;

10 = британцы наступают с суши;

11 = британцы наступают с моря.

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

В случае с фонарями на колокольне к «шуму» можно отнести такие факторы, как темнота и расстояние от Поля Ревира до колокольни, которые могут помешать отличить первый фонарь от второго. Вот важнейший отрывок из стихов Лонгфелло:

 
Вдруг видит – звездой огонек замигал,
То дан с колокольни желанный сигнал!
В седло он вскочил, сжал повод в ладонь.
Под ним захрапел в нетерпенье конь.
Второй сигнал! Он коня погнал!
 

Скорее всего, Поль Ревир был не в состоянии определить, какой фонарь зажегся первым.

Из этого следует важный вывод: информация – выбор из двух или более возможностей. Например, когда мы говорим с кем-либо, любое произносимое слово выбирается из словаря. Если бы мы пронумеровали все слова из словаря от 1 до 351 482, то могли бы столь же четко вести беседу, называя номера, а не слова (естественно, обоим собеседникам понадобились бы словари, где все слова пронумерованы одинаково, а также терпение).

Верно и обратное: любую информацию можно свести к выбору между двумя или более возможностями, а сами возможности выразить при помощи битов. Излишне говорить, что существует множество таких вариантов человеческой коммуникации, где выбор между конкретными возможностями не предоставляется, и такие формы коммуникации также жизненно необходимы. Вот почему люди не флиртуют с компьютерами (по крайней мере, хочется на это надеяться). Если некоторую информацию невозможно выразить при помощи слов, картинок или звуков, значит, ее нельзя закодировать при помощи битов. Да и не возникает такого желания.

Жесты «палец вверх» или «палец вниз» содержат по одному биту информации. Еще есть жесты «два пальца вверх» и «два пальца вниз». Два последних жеста нравились ныне покойным кинокритикам Роджеру Эберту и Джину Сискелу, которые таким образом выносили окончательные вердикты по новейшим фильмам. Итак, в данном случае мы следим только за их большими пальцами. Получается четыре возможности, которые можно представить в виде двух битов:

00 = обоим не понравилось;

01 = Сискелу не понравилось, Эберту понравилось;

10 = Сискелу понравилось, Эберту не понравилось;

11 = обоим понравилось.

Первый бит относится к Сискелу; таким образом, 0 означает, что кино не понравилось Сискелу, а 1 – что кино понравилось Сискелу. Аналогично второй бит описывает вкусы Эберта. Итак, если друг спросит, что решили Сискел и Эберт о фильме Impolite Encounter, вы, вместо того чтобы ответить: «С точки зрения Сискела – большой палец вверх, с точки зрения Эберта – большой палец вниз» или «Сискелу понравилось; Эберту – нет», можете просто сказать: «Один ноль». Если друг знает, какой бит относится к Сискелу, а какой – к Эберту, а 1 означает «палец вверх», 0 – «палец вниз», то ваш ответ будет понятен. Просто вы должны знать код.

Можно сразу условиться, что бит 1 означает «палец вниз», а 0 – «палец вверх». Это может показаться нелогичным. Естественно, мы привыкли считать, что 1 означает нечто «утвердительное», а 0 – наоборот. На самом деле такое соответствие произвольное. Требуется всего лишь, чтобы все, кто пользуется кодом, знали значения бита 0 и 1.

Значение конкретного бита или совокупности битов всегда понимается в контексте. Вероятно, смысл желтой ленточки, повязанной на конкретном дубе, понятен лишь тому, кто ее туда повесил, и тому, для кого предназначен этот знак. Достаточно изменить цвет, дерево, дату – и значение исчезнет, останется просто тряпочка. Чтобы извлечь какую-либо полезную информацию из жестикуляции Сискела и Эберта, нужно как минимум понимать, о каком фильме идет речь.

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

000 = Сискелу не понравилось; Эберту не понравилось; мне не понравилось;

001 = Сискелу не понравилось; Эберту не понравилось; мне понравилось;

010 = Сискелу не понравилось; Эберту понравилось; мне не понравилось;

011 = Сискелу не понравилось; Эберту понравилось; мне понравилось;

100 = Сискелу понравилось; Эберту не понравилось; мне не понравилось;

101 = Сискелу понравилось; Эберту не понравилось; мне понравилось;

110 = Сискелу понравилось; Эберту понравилось; мне не понравилось;

111 = Сискелу понравилось; Эберту понравилось; мне понравилось.

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

Итак, при описании таких битов Сискела и Эберта вас, возможно, уже занимает следующий непростой вопрос: «А что насчет сборника рецензий Leonard Maltin’s Movie & Video Guide?» Ведь Леонард Малтин оценивает фильмы не такими «пальцевыми» жестами, а более традиционно – при помощи системы звезд.

Чтобы определить, сколько битов Малтина требуется, сперва необходимо разобраться в его системе. Малтин оценивает фильм в некоторое количество звезд (от одной до четырех), причем звезда может делиться и пополам. (Кстати, одну звезду Мартин никогда не присваивает; вместо этого такой фильм получает рейтинг КРАХ.) Вот семь возможностей, и это означает, что для представления любой оценки достаточно трех бит:



«Что же насчет 111?» – могли бы спросить вы. Да, этот код ничего не значит. Он не определен. Если бы мы использовали двоичный код 111 в рейтингах Малтина, это бы свидетельствовало об ошибке. (Вероятно, ошибся компьютер, ведь люди никогда не ошибаются!)

Напомню, что, когда мы представляли оценки Сискела и Эберта при помощи двух битов, левый бит относился к Сискелу, правый – к Эберту. Есть ли в данном случае какое-либо значение у отдельных битов? Да, в некотором роде. Если взять числовое значение такого битового кода, прибавить к нему 2, а затем разделить результат на 2, то получится количество звезд. Это возможно лишь потому, что мы определяли коды продуманно и непротиворечиво. Мы вполне могли определить коды и так:



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

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



Однако если бы затем нашелся такой провальный фильм, который даже половины звезды не заслуживает (МЕГАКРАХ?), то понадобился бы еще один бит: 3-битных кодов больше не осталось.

В журнале Entertainment Weekly оцениваются не только фильмы, но и телешоу, CD, книги, сайты. Оценки варьируются от A+ до F (правда, есть ощущение, что такой чести удостаиваются лишь фильмы Поли Шора). Если подсчитать все возможные оценки, их наберется тринадцать. Для представления этой системы понадобится четыре бита:

0000 = F;

0001 = D–;

0010 = D;

0011 = D+;

0100 = C–;

0101 = С;

0110 = C+;

0111 = B–;

1000 = B;

1001 = B+;

1010 = A–;

1011 = A;

1100 = A+.

У нас осталось три неиспользованных кода: 1101, 1110 и 1111, а всего их шестнадцать.

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

Естественно, с десятеричными числами складывается точно такая же ситуация. Например, сколько всего региональных телефонных кодов? Региональный телефонный код в США состоит из трех цифр. Если все эти коды будут задействованы (на самом деле пока не все, но мы это проигнорируем), получится 103, или 1000 таких кодов, – от 000 до 999. Сколько семизначных телефонных кодов может быть в зоне действия регионального кода 212? 107, или 10 000 000. Сколько телефонных номеров может быть в зоне действия регионального кода 212, причем с префиксом 260? 104, или 10 000.

Аналогично в двоичной системе количество возможных кодов всегда равно двойке в некоторой степени, где степень – количество битов.



Каждый дополнительный бит удваивает количество кодов.

Если известно, сколько нужно кодов, можно ли рассчитать, сколько для этого потребуется битов? Иными словами, как считать в противоположном направлении по вышеприведенной таблице?

Используемый при этом метод иногда называется «логарифм по основанию два». Логарифм – феномен, противоположный возведению в степень. Известно, что 2 в седьмой степени равно 128. Логарифм 128 по основанию 2 равен 7. В более строгой математической нотации получается, что выражение

27 = 128

эквивалентно выражению

log2128 = 7.

Итак, если логарифм 128 по основанию 2 равен 7, а логарифм 256 по основанию 2 равен 8, то каков логарифм 200 по основанию 2? На самом деле он равен примерно 7,64, но нам этого знать и не требуется.

Как правило, биты скрыты от поверхностного взгляда в глубинах электронных устройств. Вы не увидите их на компакт-диске, в электронных часах или внутри компьютера. Лишь иногда биты различимы вполне отчетливо.

Приведу пример. Если у вас есть обычный фотоаппарат с 35-миллиметровой пленкой, возьмите кассету и поверните ее, как показано на рисунке.



Перед вами предстанет набор серебристых и черных квадратов, отдаленно напоминающий шахматную доску. На рисунке я пронумеровал их от 1 до 12. Этот набор называется DX-кодировкой. Эти 12 квадратов в действительности представляют собой 12 бит. Серебристый квадрат соответствует 1, черный – 0. Квадраты 1 и 7 всегда серебристые (1).

Что значат эти биты? Вы, возможно, знаете, что пленки различаются по светочувствительности. Пленка высокой чувствительности считается «быстрой», поскольку на ней можно производить съемку с очень короткими экспозициями. Чувствительность пленки измеряется в единицах ASA (American Standards Association, Американская ассоциация по стандартам), причем наиболее популярны пленки с чувствительностью 100, 200 и 400 единиц14. Чувствительность в единицах ASA не только напечатана на упаковке, но и закодирована на кассете.

Различают 24 стандартные степени светочувствительности для фотопленки.



Сколько битов нужно, чтобы закодировать чувствительность пленки? Ответ прост: пять. Мы знаем, что 24 = 16, а это слишком мало. А вот 25 = 32 – больше чем достаточно.

Соответствие между квадратами на кассете и чувствительностью пленки показано в таблице.



Эти коды используются в большинстве современных 35-миллиметровых фотоаппаратов. Если на вашем фотоаппарате выдержка или тип пленки устанавливаются вручную, эти коды в нем не применяются. Если же коды все-таки считываются, присмотритесь к фотоаппарату, когда будете вставлять пленку. Вы увидите шесть металлических контактов, соответствующих квадратам с первого по шестой на кассете. Серебристые квадраты – это просто открытая металлическая поверхность кассеты, которая является проводником. Черные квадраты покрыты краской, которая не проводит электричество.

Электрическая схема фотоаппарата построена так, что ток подводится к первому квадрату на кассете (он всегда серебристый). Этот ток будет (или не будет) проведен пятью контактами на квадратах со второго по шестой в зависимости от того, окрашены они изолирующей краской или нет. Так, если ток присутствует на контактах 4 и 5, но отсутствует на контактах 2, 3 и 6, в фотоаппарат вставлена пленка 400 ASA. При съемке выдержка будет установлена автоматически.

В бюджетных фотоаппаратах считываются только квадраты 0 и 3, а чувствительность пленки считается равной 50, 100, 200 или 400 единицам ASA.

Квадраты с восьмого по двенадцатый в большинстве аппаратов также не используются. В квадратах 8, 9 и 10 зашифровано число кадров на пленке, а квадраты 11 и 12 содержат сведения о том, черно-белая или цветная пленка, позитивная или негативная.

Вероятно, чаще всего вам приходилось сталкиваться с двоичными числами в коде UPC (Universal Product Code, универсальный код продукта), или просто штрихкоде, – наборе черных полос, который сегодня присутствует практически на любой упаковке. Штрихкод – наглядный символ повсеместного проникновения компьютеров в нашу жизнь.

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

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

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



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

Конечно, удобнее трактовать UPC как набор битов. Имейте в виду, что сканирующему устройству нет нужды просматривать штрихкод целиком, тем более прибор не может интерпретировать цифры в его основании, поскольку это потребовало бы применения сложной компьютерной технологии распознавания символов (Optical Character Recognition, OCR). Сканеру достаточно «увидеть» тонкий срез штрих-кода. Код UPC делают таким большим просто для того, чтобы кассиру легче было нацелить на него сканер. Срез, попадающий в сканер, выглядит следующим образом.



Почти как азбука Морзе, правда?

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



Итак, весь UPC – просто последовательность из 95 бит. В данном случае их можно сгруппировать.



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

За левым шаблоном-ограничителем следует шесть групп по семь бит в каждой. В них закодированы десятичные цифры от 0 до 9, в чем мы убедимся чуть позже. Затем идет 5-битовый центральный шаблон-разделитель – фиксированная группа битов (всегда 01010), используемая как встроенная контрольная система. Не найдя центрального шаблона-разделителя в нужном месте, сканер считает штрихкод неверным. В частности, так выявляют плохо пропечатанные или поддельные штрихкоды.

За центральным шаблоном-разделителем всегда идут еще шесть групп по семь бит каждая, а за ними – правый шаблон-ограничитель, всегда равный 101. Позже я расскажу, почему благодаря наличию правого шаблона-ограничителя штрихкод можно сканировать и в обратном направлении, то есть справа налево.

Всего в коде UPC зашифровано 12 десятичных цифр. Шесть из них закодированы с его левой стороны, по семь бит в каждой. Для их расшифровки применяется таблица.



Обратите внимание: каждый 7-битовый код начинается с 0 и заканчивается 1. Встретив 7-битовый код, который начинается с 1, а заканчивается 0, сканер «понимает», что код UPC либо неверно прочитан, либо подделан. Кроме того, в каждом коде группы единиц встречаются лишь дважды. Это значит, что каждая десятичная цифра в коде UPC зашифрована двумя вертикальными штрихами.

Еще одна особенность кодов в этой таблице – нечетное количество единиц в каждом из них. Она также позволяет проверить корректность штрихкода – так называемый контроль четности (parity). Группа битов обладает четным паритетом, если в ней четное количество битов-единиц, и нечетным паритетом, если в ней нечетное количество битов-единиц.

Для расшифровки битов в правой части штрихкода применяется таблица.



Эти коды дополняют коды из предыдущей таблицы. Там, где в левосторонних кодах был 0, теперь стоит 1, и наоборот. Правосторонние коды всегда начинаются с 1 и заканчиваются 0. Кроме того, число битов 1 в них всегда четное, что можно применять для контроля четности. Вот мы и готовы к расшифровке UPC. С помощью двух приведенных выше таблиц можно определить 11 цифр, зашифрованных на банке Campbell Soup.

0 51000 01251 7

Какая досада! Да, это те самые цифры, что напечатаны под штрихкодом. На самом деле это очень удобно: если сканер по каким-то причинам не смог прочитать код, кассир может ввести его вручную. Вы наверняка видели, как это бывает. Конечно, получается, что весь наш труд по расшифровке штрихкода был напрасным, к тому же никакой секретной информации мы так и не получили: просто 30 вертикальных штрихов превратились в 12 цифр.

Первая цифра (в данном случае 0) характеризует тип кода.

0 означает, что перед нами обычный код UPC. Если код нанесен на упаковку с товаром переменного веса, например с мясом или овощами, он начинается с 2. Товары со скидкой обозначаются цифрой 5.

Следующие пять цифр – код производителя. В нашем примере код 51000 соответствует компании Campbell Soup. Он есть на всех продуктах марки Campbell. За ними следует пятизначный (01251) код конкретного продукта этой компании, в нашем случае код банки с куриным супом. Код продукта информативен лишь в сочетании с кодом производителя. У куриного супа с вермишелью, выпущенного другой компанией, будет другой код продукта, в свою очередь код 01251 может значить нечто совершенно иное у другого производителя.

Вопреки распространенному мнению, в код UPC не включается цена товара. Информация о ней извлекается из компьютерной базы данных, используемой в кассовых аппаратах наряду со сканерами.

Последняя цифра (здесь – 7) называется символом проверки остатка и тоже используется для исключения ошибок. Чтобы проверить его на практике, присвоим букву каждой из первых 11 цифр (наш пример 0 51000 01251).

A BCDEF GHIJK

Теперь вычислим:

3 × (A + C + E + G + I + K) + (B + D + F + H + J).

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

3 × (0 + 1 + 0 + 0 + 2 + 1) + (5 + 0 + 0 + 1 + 5) = 3 × 4 + 11 = 23.

Ближайшее большее число, кратное десяти, – 30. Значит, 30–23 = 7.

Это число – результат проверки остатка – напечатано под штрихкодом и зашифровано в нем. Такая проверка – одна из форм избыточности. Если остаток, вычисленный по штрихкоду, не совпадет с остатком, явно указанным в нем, штрихкод будет сочтен недействительным.

Как правило, для представления десятичной цифры от 0 до 9 достаточно четырех бит. В штрихкодах используется по семь бит на цифру. Целыми 95 бит закодировано всего 11 значимых десятичных цифр. Если учесть, что UPC с обеих сторон ограничен пустым пространством, эквивалентным девяти нулевым битам, получается, что во всем штрихкоде 11 цифр закодировано 113 бит, по 10 бит на цифру!

Такая избыточная надежность отчасти требуется для защиты от ошибок. Код товара был бы не слишком полезен, если бы покупатель мог в два счета подправить его фломастером.

Кроме того, UPC удобен, поскольку его можно считывать в обоих направлениях. Если в первых считанных цифрах количество единиц четно, сканер распознает, что код читается справа налево. Для расшифровки правосторонних цифр компьютер использует следующую таблицу.



Вот таблица левосторонних кодов.



Эти 7-битовые коды отличаются от кодов, считываемых слева направо. Никакой путаницы не возникает.

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

Вспомните устройство азбуки Морзе. Тире втрое длиннее точки. Точки и тире в пределах одной буквы разделены паузами продолжительностью в одну точку. Промежутки между буквами по длительности равны одному тире. Слова разделяются паузами в два тире.

Чтобы немного упростить анализ, допустим, что длина тире превышает длину точки не в три, а в два раза. Это означает, что точка соответствует одному единичному биту, а тире – двум единичным битам.

Паузы состоят из нулевых битов.

Вот простейшая таблица с азбукой Морзе из главы 1.



А вот та же таблица, преобразованная в биты.



Обратите внимание: все коды начинаются с 1 и кончаются парой 0, представляющей паузу между буквами в пределах одного слова. Кодом пробела между словами является дополнительная пара 0. Таким образом, на азбуке Морзе фраза Hi there выглядит так.



Представив ее в битах, мы получим нечто очень похожее на срез штрихкода.



В битовом выражении азбука Брайля гораздо проще азбуки Морзе. Шрифт Брайля является 6-битовым кодом. Каждый символ – набор из шести точек, каждая из которых может быть выпуклой или плоской. Как говорилось в главе 3, обычно точки нумеруются от 1 до 6.



Например, вот как записывается шрифтом Брайля слово code, где крайний левый бит соответствует первой позиции, а крайний правый – шестой.



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

Биты также играют важную роль в логике, находящейся на стыке философии и математики; ее главная цель – определение истинности или ложности некоего утверждения. Истину и ложь также можно обозначить через 1 и 0.

Глава 10. Логика и переключатели

Что есть истина? Аристотель полагал, что она как-то связана с логикой. Сборник его сочинений под названием «Органон» (датируемый IV веком до н. э.) – самое раннее произведение, где подробно освещается эта тема. Для древних греков логика – средство анализа языка c целью нахождения истины, поэтому она считалась формой философии. Основа логики Аристотеля – силлогизм. Самый известный силлогизм (который фактически отсутствует в работах Аристотеля) формулируется так:

Все люди смертны;

Сократ – человек;

следовательно, Сократ смертен.

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

Смертность Сократа может показаться достаточно очевидной, однако существует множество разнообразных силлогизмов. Рассмотрим следующие две предпосылки, которые предложил математик XIX века Чарльз Доджсон, известный как Льюис Кэрролл:

Все философы логичны;

нелогичный человек всегда упрям.

В данном случае вывод не очевиден. Он формулируется так: «Некоторые упрямые люди не являются философами». Обратите внимание на неожиданное и привносящее неопределенность слово «некоторые».

На протяжении более двух тысяч лет математики боролись с логикой Аристотеля, пытаясь укротить ее с помощью математических символов и операторов. До XIX века ближе всех к решению этой задачи удалось подойти только Готфриду Вильгельму фон Лейбницу (1646–1716), который занимался логикой в молодости, а затем заинтересовался иными вещами, например одновременно с Исааком Ньютоном разработал дифференциальное исчисление (независимо от него)15. Затем на сцену вышел Джордж Буль.

Джордж Буль родился в 1815 году в Англии в социуме, где его шансы на успех были очень малы. Поскольку он был сыном башмачника и бывшей горничной, его перспективы не сильно отличались от перспектив его предков по причине жесткой классовой иерархии британского общества. Однако благодаря своему пытливому уму и отцу, который интересовался наукой, математикой и литературой, молодой Джордж получил образование, как правило являющееся привилегией мальчиков из высших классов общества. Он изучал латынь, греческий язык и математику. Ранние работы Буля по математике позволили ему в 1849 году стать первым профессором математики в Королевском колледже Корка.

Несколько математиков в середине 1800-х годов работали над формальным определением логики (среди них особо выделялся Огастес де Морган). Однако именно Буль совершил настоящий концептуальный прорыв: сначала в короткой книге «Математический анализ логики, или Очерк исчисления дедуктивных умозаключений» (1847), затем в гораздо более объемном и амбициозном произведении «Исследование законов мышления, на которых основаны математические теории логики и вероятностей» (1854), которое кратко также называется «Исследование законов мышления». Буль умер в 1864 году в возрасте 49 лет от пневмонии, которую он подхватил, попав под дождь по дороге на лекцию.

Название книги Буля 1854 года говорит о постановке амбициозной задачи: поскольку мозг разумного человека мыслит, используя логику, то, найдя способ математического представления логики, мы получим математическое описание того, как работает мозг. Разумеется, в наше время такое видение кажется весьма наивным (или просто оно значительно опережает свое время).

Изобретенная Булем алгебра очень похожа на обычную. В обычной алгебре операнды (обычно буквы) обозначают цифры, а операторы (например, «+» и «×») указывают, как эти числа должны объединяться. Как правило, мы используем обычную алгебру для решения таких задач: у Ани есть три яблока. У Бетти в два раза больше яблок, чем у Ани. У Кармен на пять яблок больше, чем у Бетти. У Дейрдре в три раза больше яблок, чем у Кармен. Сколько яблок у Дейрдре?

Чтобы решить эту задачу, сначала преобразуем ее в арифметические выражения, используя четыре буквы, соответствующие количеству яблок, имеющихся у каждой из четырех женщин:

A = 3;

Б = 2 × A;

К = Б + 5;

Д = 3 × К.

Мы можем объединить эти четыре выражения в одно путем подстановки, а затем уже выполнить операции сложения и умножения:

Д = 3 × К;

Д = 3 × (Б + 5);

Д = 3 × ((2 × А) + 5);

Д = 3 × ((2 × 3) + 5);

Д = 33.

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

Первое правило заключается в том, что сложение и умножение являются коммутативными операциями. Это означает, что можно менять операнды местами в обеих частях выражения, не влияя на результат:

A + B = B + A;

A × B = B × A.

Напротив, операции вычитания и деления не являются коммутативными.

Сложение и умножение – ассоциативные операции, то есть:

A + (B + C) = (A + B) + C;

A × (B × C) = (A × B) × C.

Наконец, умножение дистрибутивно по отношению к сложению:

A × (B + C) = (A × B) + (A × C).

Другой характеристикой обычной алгебры является то, что она всегда оперирует числами, например килограммами сыра, количеством уток, расстоянием, которое прошел поезд, или возрастом членов семьи. Гений Буля сделал алгебру более абстрактной, отделив ее от концепции числа. В булевой алгебре (именно такое название получила алгебра Буля) операнды относятся не к числам, а к классам. Класс – это просто набор предметов, который в дальнейшем стал множеством.

Поговорим о кошках. Кошки могут быть мужского и женского пола. Для удобства множество котов будем обозначать буквой M, а множество кошек – Ж. Имейте в виду, что эти два символа не соответствуют количеству кошек. Количество котов и кошек может меняться с течением времени по мере того, как новые особи рождаются, а старые, к сожалению, уходят в мир иной. Эти буквы обозначают классы кошек со специфическими характеристиками. Говоря о котах, мы можем просто сказать «М».

Мы также можем использовать другие буквы для обозначения окраса кошек: буквой Р описать множество рыжих, буквой Ч – множество черных, буквой Б – множество белых, а буквой Д – множество кошек всех «других» цветов, то есть кошек, не входящих в классы Р, Ч или Б.

Наконец (по крайней мере, в нашем примере) кошки могут быть либо стерилизованными, либо нет. Давайте обозначим буквой С множество стерилизованных кошек, а буквой Н – множество нестерилизованных.

В обычной (числовой) алгебре операторы «+» и «×» используются для обозначения операций сложения и умножения. В булевой алгебре применяются те же символы «+» и «×», что может вызвать путаницу. Всем известно, как складывать и умножать числа в обычной алгебре, но как можно складывать и умножать классы?

Дело в том, что в булевой алгебре мы фактически ничего не складываем и не умножаем. Вместо этого символы «+» и «×» означают нечто совершенно иное.

В булевой алгебре символ «+» – это объединение двух классов, которое предполагает объединение всего, относящегося к первому классу, со всем, относящимся ко второму. Например, выражение Ч + Б означает множество всех кошек черного и белого окраса.

Символ «×» – это пересечение двух классов, то есть пересечение множества элементов, принадлежащих как первому, так и второму классу. Например, Ж × Р – класс всех кошек женского пола и рыжего окраса. Как и в обычной алгебре, мы можем написать Ж × Р в виде Ж и Р или просто ЖР (именно так предпочитал писать сам Буль). Вы можете рассматривать эти две буквы в качестве двух прилагательных, описывающих множество «рыжие кошки женского пола».

Чтобы не спутать обычную алгебру с булевой, вместо символов «+» и «×» для обозначения объединения и пересечения классов иногда используются символы U и ∩.

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

Коммутативные, ассоциативные и дистрибутивные правила остаются справедливыми в булевой алгебре. Более того, здесь оператор «+» является дистрибутивным по отношению к оператору «×», чего нельзя сказать об обычной алгебре:

Б + (Ч × Ж) = (Б + Ч) × (Б + Ж).

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

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

М + Ж = 1.

Значит, множество всех кошек содержит самцов и самок. Точно так же оно включает всех кошек рыжего, черного, белого и других окрасов:

Р + Ч + Б + Д = 1.

Кроме того, множество всех кошек можно получить и так:

С + Н = 1.

Символ 1 может использоваться со знаком минус, чтобы указать на множество всех вещей, исключающее некое подмножество, например:

1 − М.

Как видите, это множество всех кошек, кроме самцов. Множество всех кошек, исключающее всех самцов, соответствует множеству кошек женского пола:

1 − М = Ж.

Другой необходимый символ – 0, а в булевой алгебре 0 означает пустое множество, которое ничего не содержит. Пустое множество – результат пересечения двух взаимоисключающих множеств, например множество кошек-гермафродитов:

Ж × М = 0.

Обратите внимание: символы 1 и 0 иногда работают одинаково в булевой и в обычной алгебре. Например, пересечение множества всех кошек и кошек женского пола соответствует множеству кошек-самок:

1 × Ж = Ж.

Пересечение пустого множества и множества кошек-самок представляет пустое множество:

0 × Ж = 0.

Объединение пустого множества и множества всех кошек-самок – это множество кошек-самок:

0 + Ж = Ж.

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

1 + Ж = 1.

Это не имеет смысла в обычной алгебре.

Поскольку Ж – множество всех кошек-самок, а 1 − Ж – множество всех кошек, которые не являются самками, объединение этих двух множеств соответствует 1:

Ж + (1 − Ж) = Ж + М = 1.

Пересечение двух множеств соответствует 0:

Ж × (1 − Ж) = 0.

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

Где булева алгебра действительно отличается от обычной, так это в следующем выражении:

Ж × Ж = Ж.

Пересечение множества кошек-самок и множества кошек-самок по-прежнему множество кошек-самок. Это выражение имеет смысл в булевой алгебре. Однако оно неверное, если бы буква Ж означала число. Буль считал, что выражение X2 = X является единственным выражением, отличающим его алгебру от обычной. Вот еще одно булево выражение, которое выглядит странно с точки зрения обычной алгебры:

Ж + Ж = Ж.

Объединение множества кошек-самок и множества кошек-самок по-прежнему является множеством кошек-самок.

Булева алгебра предоставляет математический метод для решения силлогизма Аристотеля. Давайте рассмотрим первые две его части:

Все люди смертны;

Сократ – человек.

Буквой Л мы обозначим множество всех людей, буквой Х – множество всех смертных существ, а буквой С – множество Сократов. Что означает выражение «все люди смертны»? Пересечение множества всех людей и множества всех смертных существ – это множество всех людей:

Л × Х = Л.

Выражение Л × Х = Х было бы неправильным, поскольку множество всех смертных существ включает кошек, собак и деревья.

Выражение «Сократ – человек» означает, что пересечение множества Сократов (очень небольшого множества) и множества всех людей (гораздо более крупного множества) представляет множество Сократов:

С × Л = С.

Поскольку из первого уравнения известно, что Л равно Л × Х, можем подставить это выражение во второе:

С × (Л × Х) = С.

Согласно ассоциативному закону это равнозначно выражению:

(С × Л) × Х = С.

Однако мы уже знаем, что С × Л равно С, поэтому можем упростить выражение, используя эту подстановку:

С × Х = С.

Теперь мы закончили. Эта формула указывает, что пересечение множества Сократов и множества всех смертных существ есть С, а это значит, что Сократ смертен. Если бы вместо этого оказалось, что С × Х равно 0, мы бы пришли к выводу, что Сократ не был смертным. Если бы мы обнаружили, что С × Х равно Х, то вывод заключался бы в том, что Сократ является единственным смертным существом, а все остальные бессмертны.

Использование булевой алгебры может показаться излишним для доказательства очевидного факта (особенно учитывая то, что Сократ доказал собственную смертность 2400 лет назад), однако ее можно использовать для того, чтобы определить, удовлетворяет ли что-то определенному набору критериев. Возможно, однажды вы зайдете в зоомагазин и скажете продавцу: «Мне нужен стерилизованный кот белого или рыжего окраса, или стерилизованная кошка любого окраса, кроме белого, или я возьму любую из имеющихся у вас черных кошек». И продавец скажет, что вам нужна кошка из множества, описываемого следующим выражением:

(М × С × (Б + Р)) + (Ж × С × (1 − Б)) + Ч.

Верно? И вы ответите: «Да! Точно!»

Проверяя, правильно ли продавец вас понял, можно отказаться от понятий объединения и пересечения, вместо них использовать слова ИЛИ и И. Я пишу эти слова заглавными буквами, потому что они не только соответствуют понятиям в обычном языке, но и могут представлять собой операции в булевой алгебре. Когда вы формируете объединение двух множеств, вы фактически берете элементы из первого ИЛИ второго множества. А когда вы формируете пересечение, то берете только те элементы, которые одновременно принадлежат первому И второму множествам. Кроме того, вы можете использовать слово НЕ везде, где встречается символ 1, за которым следует знак «минус». Таким образом:

• символ «+» (ранее обозначавший объединение) теперь означает ИЛИ;

• символ «×» (ранее обозначавший пересечение) теперь означает И;

• выражение «1 –» (ранее обозначавшее множество всех элементов, за исключением чего-то) теперь означает НЕ.

Именно поэтому приведенное выше выражение также может быть записано:

(М И С И (Б ИЛИ Р)) ИЛИ (Ж И С И (НЕ Б)) ИЛИ Ч.

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

(М И С И (Б ИЛИ Р))

ИЛИ

(Ж И С И (НЕ Б))

ИЛИ

Ч

С помощью этой формулы продавец может выполнить то, что называется проверкой условия. Незаметно мы перешли к несколько иной форме булевой алгебры, в которой буквы не обозначают множества. Вместо этого буквы теперь могут соответствовать числам. Однако буквам может быть присвоено только значение 0 или 1. Число 1 означает «да», «истина», данная конкретная кошка удовлетворяет этим критериям, число 0 – «нет», «ложь», данная кошка не удовлетворяет этим критериям.

Сначала продавец приносит нестерилизованного рыжего кота. Вот выражение, описывающее множество приемлемых кошек:

(М × С × (Б + Р)) + (Ж × С × (1 − Б)) + Ч.

Вот как оно выглядит после подстановки значений 0 и 1:

(1 × 0 × (0 + 1)) + (0 × 0 × (1–0)) + 0.

Обратите внимание: единственными символами, которым было присвоено значение 1, являются М и Р, поскольку речь идет о рыжем коте.

Теперь нужно упростить данное выражение. Если оно упрощается до 1, то кошка удовлетворяет вашим критериям; если оно упрощается до 0, то кошка критериям не удовлетворяет. Имейте в виду, что в процессе упрощения выражения мы на самом деле ничего не складываем и не умножаем, хотя обычно можем сделать вид, что выполняем эти операции. Большинство тех же правил применяются тогда, когда символ «+» означает ИЛИ, а символ «×» – И. Иногда в современных текстах для обозначения И и ИЛИ используются символы «∧» и «∨» вместо «×» и «+». Однако именно здесь символы «+» и «×», вероятно, имеют наибольший смысл.

Когда символ «×» означает И, возможны результаты:

0 × 0 = 0;

0 × 1 = 0;

1 × 0 = 0;

1 × 1 = 1.

Другими словами, результат равен 1 только в том случае, если левый И правый операнды равны 1. Эта операция соответствует обычному умножению и называется конъюнкцией, и ее можно описать с помощью небольшой таблицы, аналогичной таблицам сложения и умножения, приведенным в главе 8.


Когда символ «+» означает ИЛИ, возможны следующие результаты.

0 + 0 = 0;

0 + 1 = 1;

1 + 0 = 1;

1 + 1 = 1.

Результат равен 1, если левый ИЛИ правый операнд равен 1. Исход этой операции похож на результаты обычного сложения, за исключением того, что в данном случае 1 + 1 равно 1. Результаты операции ИЛИ, которая называется дизъюнкцией, можно представить в виде другой таблицы.



Мы готовы использовать эти таблицы для вычисления:

(1 × 0 × 1) + (0 × 0 × 1) + 0 = 0 + 0 + 0 = 0.

Результат 0 – «нет», «ложь», этот котенок не подходит.

Затем продавец приносит стерилизованную белую кошку. Исходное выражение выглядело так:

(М × С × (Б + Р)) + (Ж × С × (1 − Б)) + Ч.

Снова подставим в него значения 0 и 1:

(0 × 1 × (1 + 0)) + (1 × 1 × (1–1)) + 0.

И упростим его:

(0 × 1 × 1) + (1 × 1 × 0) + 0 = 0 + 0 + 0 = 0.

Еще один несчастный котенок отвергнут.

Затем продавец приносит стерилизованную серую кошку. (Серый соответствует критерию «другой окрас», то есть не белый, не черный и не рыжий.) Вот соответствующее выражение:

(0 × 1 × (0 + 0)) + (1 × 1 × (1–0)) + 0.

Теперь упростим его:

(0 × 1 × 0) + (1 × 1 × 1) + 0 = 0 + 1 + 0 = 1.

Результат вычисления, равный 1, означает «да», «истина», котенок нашел свой дом. (Кроме того, он оказался самым милым!)

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

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



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



Если вы оставляете левый переключатель разомкнутым, а замыкаете правый, также ничего не произойдет. Лампочка загорается, когда и левый, и правый переключатели оказываются замкнутыми.



Ключевым в данном случае является союз «и». Левый и правый переключатели должны быть замкнуты, чтобы ток шел по цепи.

Эта схема решает небольшую логическую задачу. Фактически лампочка отвечает на вопрос: «Замкнуты ли оба переключателя?» Мы можем суммировать результаты работы этой схемы в следующей таблице.



В предыдущей главе мы говорили о том, как с помощью двоичных цифр, или битов, можно представить любую информацию, начиная от чисел и заканчивая направлением большого пальца Роджера Эберта. Мы могли сказать, что ноль бит означает, что палец направлен вниз, а один бит – что палец направлен вверх. Переключатель может находиться в двух положениях, поэтому для его описания достаточно одного бита. Можно сказать, что 0 – это «переключатель разомкнут», а 1 – «переключатель замкнут». Лампочка также имеет два состояния, следовательно, для их описания достаточно одного бита. Можно сказать, что 0 – «лампочка не горит», а 1 – «лампочка горит». Теперь мы просто переписываем приведенную выше таблицу.



Обратите внимание: если мы поменяем местами левый и правый переключатели, результаты останутся прежними. Нам не обязательно различать переключатели. Именно поэтому таблицу можно переписать так, чтобы она напоминала приведенные И/ИЛИ.



Действительно, это соответствует таблице с результатами выполнения булевой операции И.



Эта простая схема фактически выполняет операцию И в булевой алгебре.

Теперь попробуйте соединить два переключателя иначе.



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



Или нижний переключатель.



Можно также замкнуть оба переключателя.



Лампочка загорается, если замкнуть верхний или нижний переключатель. Ключевым словом в данном случае является союз «или».

Опять же, данная схема решает логическую задачу. Лампочка отвечает на вопрос: «Замкнут ли хотя бы один переключатель?» В следующей таблице показаны результаты работы этой схемы.



Теперь снова используем 0 для обозначения разомкнутого переключателя или негорящей лампочки и 1 – для обозначения замкнутого переключателя или горящей лампочки, в результате чего получим следующую таблицу.



Опять же ничего не изменится, если переключатели поменять местами, поэтому таблицу можно заполнить следующим образом.



Вероятно, вы уже догадались, что эта таблица соответствует результатам булевой операции ИЛИ.



Значит, два соединенных параллельно переключателя выполняют операцию, эквивалентную булевой операции ИЛИ.

Явившись в зоомагазин, вы сказали продавцу: «Мне нужен стерилизованный кот белого или рыжего окраса; или стерилизованная кошка любого окраса, кроме белого; или я возьму любую из имеющихся у вас черных кошек», – и продавец составил такое выражение:

(М × С × (Б + Р)) + (Ж × С × (1 − Б)) + Ч.

Теперь, когда вы знаете, что два соединенных последовательно переключателя выполняют логическую операцию И (обозначаемую символом «×»), а два переключателя, соединенных параллельно, – логическую операцию ИЛИ (обозначаемую символом «+»), вы можете соединить восемь переключателей.



Все переключатели в этой схеме обозначены буквами, соответствующими буквам в булевом выражении. (Б¯ означает НЕ Б и является альтернативным способом записи выражения 1 − Б). Действительно, если вы просмотрите электрическую схему слева направо и сверху вниз, то столкнетесь с буквами в том же порядке, в каком они представлены в выражении. Каждый символ «×» соответствует месту схемы, где два переключателя (или две группы переключателей) соединены последовательно, каждый символ «+» – месту схемы, в котором два переключателя (или две группы переключателей) соединены параллельно.

Как вы помните, продавец сначала принес нестерилизованного рыжего кота. Замкните соответствующие переключатели.



Несмотря на то что переключатели М, Р и НЕ Б замкнуты, лампочка не загорается. Затем продавец принес стерилизованную белую кошку.



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



Так можно замкнуть все нужные переключатели, зажечь лампочку и показать, что котенок удовлетворяет всем вашим критериям.

Джордж Буль никогда не собирал такую схему. Ему никогда не доводилось видеть логическое выражение, реализованное с помощью переключателей, проводов и лампочек. Разумеется, одним из препятствий было то, что лампа накаливания была изобретена только спустя 15 лет после смерти Буля. Однако Сэмюэл Морзе продемонстрировал свой телеграф в 1844 году – за десять лет до публикации книги Буля «Исследование законов мышления», и ему ничего не стоило заменить лампочки в приведенной выше схеме клопфером.

Никому в XIX веке не удалось уловить связь между булевыми операциями И и ИЛИ и последовательным и параллельным соединением простых переключателей – ни математику, ни электрику, ни оператору телеграфа16. Это не пришло в голову даже отцу-основателю компьютерной революции – Чарльзу Бэббиджу (1792–1871), который переписывался с Булем и был знаком с его работой, а большую часть жизни потратил на разработку разностной, а затем аналитической машины, которая спустя столетие будет считаться предшественником современных компьютеров. Сейчас мы знаем, что Бэббиджу помогло осознание того, что вместо шестеренок и рычагов для выполнения вычислений лучше использовать телеграфные реле.

Да, телеграфные реле.

1.Книга написана в 2000 году, и автор отталкивается от реалий того периода. Прим. перев.
2.В русском языке (по массивам текстов) это буквы О, Е, А. Прим. науч. ред.
3.При речи на английском языке. В русском языке темп речи (скорость произнесения ее элементов) медленнее, поскольку слова на 20–30 % длиннее. Прим. науч. ред.
4.«Ты и я». Прим. перев.
5.О, около, про. Прим. перев.
6.На самом деле интенсивность света лампочки флуктуирует, то есть пульсирует, но наш глаз не способен различать настолько быстрые и мелкие пульсации. Прим. науч. ред.
7.Принято считать за направление тока направление положительно заряженных частиц. По факту ток создается электронами и течет в противоположном направлении. Прим. науч. ред.
8.Напряжение – работа поля по переносу заряда. Электрический ток – это изменение объемного заряда во времени, но поскольку со временем заряды (электроны) кончатся, необходим источник, восполняющий «запасы» электронов, которые могли бы перемещаться по проводнику. Таким источником может быть источник ЭДС. ЭДС, в свою очередь, – это работа внешних сил по переносу заряда, то есть сил не электромагнитной природы. В рассматриваемом примере это химические реакции. Прим. науч. ред.
9.В России разработкой ламп накаливания занимался физик Александр Николаевич Лодыгин. Прим. науч. ред.
10.В России толщина провода традиционно описывается через площадь сечения, которая измеряется в квадратных миллиметрах, либо через диаметр провода в миллиметрах. Прим. науч. ред.
11.Запятая для разделения разрядов числа используется преимущественно в англоязычной нотации; дробная часть числа в таком случае отделяется точкой. В России принято разделять разряды пробелами, а дробную часть отделять запятой. Прим. науч. ред.
12.Вскоре после выхода в свет первого издания этой книги, в том же 2000 году, Джон Тьюки скончался.
13.Здесь и далее стихотворение приводится в переводе М. А. Зенкевича.
14.Сегодня в большинстве стран мира используется система ISO (International Organization for Standartization, Международная организация по стандартизации). Обозначения светочувствительности пленки по системам ASA и ISO совпадают. Прим. науч. ред.
15.Лейбниц и Ньютон предложили разный терминологический аппарат и различные формы записи дифференциального исчисления. В итоге победил вариант Лейбница. Прим. науч. ред.
16.То, что мы привыкли называть булевой алгеброй, булевыми (или булевскими) переменными – всего лишь побочный эффект прорыва, который совершил Буль. В тот момент, когда на сцене появился Буль, логика и математика развивались в значительной степени автономно на протяжении более двух тысяч лет! Буль при помощи своей алгебры показал, как можно соединить эти две дисциплины, и тем самым создал новую – математическую – логику. Прим. науч. ред.

Pulsuz fraqment bitdi.

10,67 ₼
Yaş həddi:
16+
Litresdə buraxılış tarixi:
07 noyabr 2019
Tərcümə tarixi:
2019
Yazılma tarixi:
2000
Həcm:
756 səh. 527 illustrasiyalar
ISBN:
9785001175452
Yükləmə formatı:

Oxşar kitablar