Автор книги: Брайан Керниган
Жанр: Компьютеры: прочее, Компьютеры
сообщить о неприемлемом содержимом
Как мы преобразуем аналоговую информацию в цифровую форму? Давайте рассмотрим несколько основных примеров, которые в совокупности иллюстрируют наиболее важные понятия, а начнем с изображений и музыки.
Преобразование изображений в цифровую форму – возможно, самое простое наглядное объяснение процесса. Предположим, мы сфотографировали своего кота (рис. 2.1).
Аналоговая камера создает изображение, подвергая светочувствительный участок пластиковой пленки с химическим покрытием воздействию лучей, отраженных от фотографируемого объекта. На различные участки попали разные «объемы» света разных цветов, и это повлияло на окраску пленки. Затем ее обрабатывают и печатают на бумаге в ходе замысловатой последовательности химических процессов. Цвета отображаются с помощью сочетания красителей, взятых в разных долях.

Рис. 2.1. Фотография кота, 2020 год
В цифровой камере объектив фокусирует изображение на прямоугольной матрице с крошечными светочувствительными детекторами, которые находятся за красными, зелеными и синими фильтрами. Каждый детектор накапливает электрический заряд, пропорциональный количеству падающего на него света. Эти заряды преобразуются в числовые значения, и на основе полученных результатов, которые обозначают интенсивность света в тех или иных точках, создается изображение в цифровой форме. Чем больше детекторов и чем точнее измеряются заряды, тем строже цифровое изображение будет соответствовать оригиналу.
Каждый элемент матрицы датчиков представляет собой три детектора, которые измеряют количество красного, зеленого и синего света. Одна такая группа называется пикселем, или элементом изображения[15]15
В английском языке термин pixel образован слиянием первых слогов сочетания picture element («элемент изображения»).
[Закрыть]. Если размер изображения составляет 4000 на 3000 пикселей, то в нем двенадцать миллионов элементов изображения, или двенадцать мегапикселей, – немного, по меркам современных цифровых фотоаппаратов. «Окраска» пикселя обычно определяется тремя значениями, которые соответствуют интенсивности красного, зеленого и синего цветов, поэтому для изображения размером 12 мегапикселей в сумме записывается 36 миллионов значений интенсивности света. На экране картинка отображается с помощью множества троек красных, зеленых и синих огоньков, уровень яркости которых задается соответствующими значениями в пикселе. Если вы посмотрите на экран телефона, компьютера или телевизора через увеличительное стекло, то разглядите отдельные пятнышки, подобно показаным на рис. 2.2, только цветные. Если вы подойдете достаточно близко к экранам стадионов или цифровых рекламных щитов, то увидите такую же картинку.

Рис. 2.2. RGB-пиксели
Второй пример аналого-цифрового преобразования – обработка звука, в особенности музыкальных произведений. Цифровая музыка хороша для изучения, потому что она стала одной из первых областей, где свойства цифровой информации привели к важным последствиям в социальном, экономическом и юридическом аспектах. В отличие от виниловых пластинок или аудиокассет, цифровую музыку можно без искажений перенести на каждое домашнее устройство сколько угодно раз, а точные копии отправить в любую точку мира по интернету, где их тоже получат в безупречном виде. И всё бесплатно. Индустрия звукозаписи увидела в этом серьезную угрозу и начала кампанию на юридическом и политическом фронтах, стремясь остановить копирование. Война не окончена – стычки все еще происходят в судах и на политических аренах, – но возникновение стриминговых музыкальных сервисов, таких как Spotify, сгладило проблему. К этому вопросу мы еще вернемся в главе 9.
Что такое звук? Любой его источник вызывает колебания давления воздуха посредством вибрации или других быстрых движений, и наши уши преобразуют эти изменения в нервную активность, которую мозг интерпретирует как звук. Устройство под названием «фонограф», созданное в 1870-х годах Томасом Эдисоном, преобразовывало такие пульсации в бороздку с непостоянной глубиной на восковом цилиндре, и полученная дорожка позже использовалась для воссоздания колебаний давления воздуха. Трансформация звука в дорожку с углублениями представляла собой «запись», а обратное преобразование – «воспроизведение». Изобретение Эдисона быстро совершенствовалось, и к 1940-м годам появились долгоиграющие записи, или грампластинки (рис. 2.3), от которых не отказались до сих пор, хотя в основном их слушают любители ретрозвука.
Пластинки – это виниловые диски с длинными спиральными дорожками, на которых зашифрованы изменения звукового давления. Для записи звук подается на микрофон, измеряющий данные перепады, и полученные результаты используются для создания последовательности высот и углублений на спиральной канавке. Когда пластинка проигрывается, по этой дорожке перемещается тонкая игла. Ее движения преобразуются в колебания электрического тока, который усиливается и подается на репродуктор или наушники – устройства, создающие звук посредством вибраций поверхности.

Рис. 2.3. Грампластинка (долгоиграющая запись)
Звук легко визуализировать, если построить график изменения давления воздуха во времени, как показано на рис. 2.4. Значения давления можно передавать любым физическим способом: напряжением или током в электронной схеме, яркостью света или полностью механической системой, как в оригинальном фонографе Эдисона. Высота волн звукового давления здесь соответствует интенсивности или громкости, а по горизонтальной оси отложено время. Число волн в секунду – высота или частота звука.

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

Рис. 2.5. Оцифровка формы звукового сигнала
Измерения дают нам последовательность цифровых значений, которые приближенно отображают кривую. Чем чаще и точнее мы делаем измерения, тем меньше будет расхождение. В итоге у нас получится последовательность чисел – цифровое представление формы волны, которое можно хранить, копировать, обрабатывать и пересылать.
Воспроизводить звук можно с помощью устройств, которые генерируют на основе числовых значений последовательность изменений напряжения или тока. Полученный сигнал воздействует на динамик или наушники, и так снова создается звук. Трансформация звуковых волн в числа называется аналого-цифровым преобразованием, а соответствующие устройства – аналого-цифровыми преобразователями, или АЦП. Обратный процесс – цифро-аналоговое преобразование. Ни то ни другое не бывает совершенным: при трансформации в обоих направлениях что-то утрачивается. Для большинства людей потери незаметны, хотя аудиофилы утверждают, что цифровой звук не так хорош, как аналоговый с долгоиграющей пластинки.
Первым носителем цифрового звука, рассчитанным на потребителей, стал аудио-компакт-диск, или CD, появившийся примерно в 1982 году. В отличие от грампластинок с аналоговой канавкой, на компакт-дисках записываются числа, для чего применяется длинная спиральная дорожка на одной из сторон. Поверхность в каждой точке дорожки либо гладкая, либо почти незаметно углублена. С помощью таких ямок или их отсутствия кодируются числовые значения волны. Любой участок – это один бит, а последовательность битов передает цифровые значения в двоичном кодировании, что мы обсудим в следующем разделе. Когда диск вращается, лазер освещает дорожку, и фотоэлектрический датчик определяет интенсивность отраженного света. Если она низкая, значит, на участке есть углубление, а если высокая, то ямки нет. При стандартном кодировании на компакт-дисках берется 44 100 выборок звука в секунду. Каждая из них имеет два значения амплитуды (левый и правый каналы для стерео), измеренных с погрешностью не более 1/65 536 – последнее число равняется 216. Сами углубления настолько малы, что их можно увидеть только под микроскопом. DVD устроены аналогично, только участки на дорожке меньше, а у лазера более короткая длина волны, что позволяет записывать на них около 5 Гб по сравнению с 700 Мб для CD.
Компакт-диск практически вытеснил грампластинки из обихода, потому что значительно превосходил их во многих отношениях: не такой хрупкий, не подверженный износу (с лазером нет физического контакта), не так сильно боящийся грязи или царапин и в буквальном смысле компактный. Но пластинки периодически возрождаются из пепла, пусть и не слишком масштабно, а вот CD с поп-музыкой находятся в глубоком упадке, потому что ее проще и дешевле загрузить из интернета. Компакт-диски «подрабатывали» как средство хранения и распространения ПО и данных, но затем их место заняли DVD, а тех, в свою очередь, заменили интернет-хранилища и загрузки. Многим читателям аудиодиски уже могут показаться таким же антиквариатом, как и грампластинки. Однако же я рад, что моя музыкальная коллекция полностью состоит из CD (правда, также она хранится в формате MP3 на съемных жестких дисках). Ими я владею по-настоящему, чего нельзя сказать о подборках композиций «в облаке». Выпущенные на производстве диски переживут меня, а вот их копии, возможно, нет: при их записи использовались химические изменения в светочувствительных красителях, чьи свойства могут с течением времени стать иными.
Поскольку звук и изображения содержат больше деталей, чем человек способен воспринять, их можно сжимать. В случае музыки применяются такие методы, как MP3 и AAC (Advanced Audio Coding[16]16
Усовершенствованное звуковое кодирование (англ.).
[Закрыть]). Размер файла уменьшается в 10 раз, а ухудшение качества почти неуловимо. Для изображений наиболее распространена техника сжатия JPEG, названная в честь организации-изобретателя – Joint Photographic Experts Group (Совместная экспертная группа по фотографии). С ее помощью можно уменьшить файл картинки в 10 и более раз. Сжатие – один из примеров обработки, которую можно применить к цифровой информации, но чрезвычайно сложно (а то и невозможно) к аналоговой. Подробнее мы обсудим сжатие в главе 8.
А что насчет фильмов? В 1870-х годах английский фотограф Эдвард Мейбридж показал, как создать иллюзию движения, быстро и последовательно перемещая статичные снимки. Сегодня в кинофильмах изображения прокручиваются со скоростью 24 кадра в секунду, а в телепередачах – от 25 до 30 кадров в секунду. Это достаточно быстро, чтобы человеческий глаз воспринимал последовательность картинок как непрерывное движение. Для видеоигр данный показатель обычно составляет 60 кадров в секунду, тогда как в старых кинолентах он равен 10, поэтому в них заметно мерцание. О таком искажении нам напоминают давнее обозначение для фильмов (англ, flicks – «мерцание») и современное название Netflix.
В цифровом представлении фильма сочетаются и синхронизируются звуковые и графические компоненты24. Здесь сжатие можно применить, чтобы уменьшить запрашиваемый объем пространства, как в стандартных форматах вроде MPEG (Moving Picture Experts Group[17]17
Группа экспертов по движущимся изображениям (англ.).
[Закрыть]). Ha практике отобразить видео в числах тяжелее, чем аудио. Среди причин – то, что оно сложнее по своей сути, а также то, что большая часть видеозаписей основывается на стандартах широковещательного телевидения, которое почти всегда существовало в аналоговой форме. Сейчас аналоговое ТВ постепенно сворачивается в большинстве стран мира. В США телевещание перевели на цифровой формат в 2009 году, в других странах этот процесс находится на тех или иных стадиях.
Кино и телешоу представляют собой комбинацию изображений и звука, а производство коммерческих фильмов обходится гораздо дороже, чем производство музыки, однако сделать идеальные цифровые копии кинолент и бесплатно разослать их по всему миру настолько же просто. Поэтому убыток от нарушения авторских прав в данном случае выше, и индустрия развлечений продолжает кампанию против пиратства.
Некоторые виды информации легко представить в цифровой форме, поскольку не требуется никаких преобразований, кроме согласования формата записи. Рассмотрим обычный текст – набор символов алфавита, цифр и знаков препинания, как в этой книге. Мы могли бы присвоить уникальный номер каждой отдельной букве: А равно 1, В равно 2 и так далее. Получилось бы прекрасное цифровое представление. Фактически именно так все и делается, разве что в стандартном представлении буквам от А до Z соответствуют числа с 65 по 90, от а до z – с 97 по 122, цифрам от 0 до 9 – с 48 по 57, а другие символы, такие как знаки препинания, принимают другие значения. Это представление называется ASCII (American Standard Code for Information Interchange) – стандартный американский код для обмена информацией, принятый в 1963 году.
На рис. 2.6 показана часть ASCII; я опустил первые четыре ряда, в которых содержится табуляция, пробел и другие непечатаемые символы.

Рис. 2.6. Символы ASCII и их числовые значения
В разных географических и языковых регионах существует множество стандартов для набора символов, но мир, по большому счету, сошелся на одном из них, который называется Unicode (Юникод). Он определяет уникальное числовое значение для каждого знака во всех языках. Это большая коллекция, поскольку люди, создавая системы письменности, всегда проявляли бесконечную изобретательность, но редко заботились о систематичности. Unicode включает в себя 140 тысяч символов, и их число неуклонно растет. Как несложно представить, значительную часть объема составляют азиатские знаки вроде набора китайских иероглифов, но ими дело не ограничивается. На веб-сайте Юникода (https://home.unicode.org/) можно просмотреть списки всех символов – это увлекательное занятие, и туда определенно стоит заглянуть.
Подведем итог: цифровые формы записи способны представлять любые из перечисленных видов информации и вообще всё, что можно преобразовать в числовые значения. Поскольку это всего лишь цифры, они подходят для обработки вычислительными машинами. Как мы увидим в главе 9, числовые данные можно скопировать на любой компьютер через универсальную цифровую сеть – интернет.
2.3. Биты, байты и двоичная система исчисленияВ мире есть только 10 типов людей: те, которые понимают двоичные числа, и те, кто их не понимает.
Цифровые системы представляют любую информацию в виде числовых значений. Возможно, вы удивитесь, но в процессе работы они не используют привычную нам десятичную систему счисления (систему по основанию 10). Вместо этого там применяются двоичные числа – система по основанию 2.
Хотя каждый более-менее знаком с арифметикой, я вижу по своему опыту, что люди не слишком четко понимают, что такое число, особенно когда дело доходит до построения аналогий между десятичной системой (хорошо известной) и двоичной (незнакомой большинству). В текущем разделе я постараюсь прояснить этот вопрос, но, если вам покажется, что все запуталось и путает вас самих, просто говорите себе: «Это как обычные числа, только вместо десяти – два».
Биты – наиболее элементарный способ представления цифровой информации. Как отмечено в цитате в начале этой главы, «бит» – это сокращение от слов «двоичное число» (англ, binary digit), введенное статистиком Джоном Тьюки в середине 1940-х годов. Эдвард Теллер, хорошо известный как отец водородной бомбы, предпочитал использовать слово «биджит» (bigit), которое, к счастью, не прижилось.
Термин «двоичный», или «бинарный», указывает на то, что нечто имеет два значения (приставка «би» означает «два»), и это действительно так, ведь бит принимает значение либо 0, либо 1, и никакое иное. Тут очевидно различие с десятичными цифрами: они имеют 10 возможных значений, от 0 до 9.
С помощью одного бита мы способны закодировать или представить любую ситуацию, где есть выбор единственного параметра из двух. Таких бинарных вариантов предостаточно: вкл./выкл., истина/ложь, да/нет, высоко/ низко, вход/выход, вверх/вниз, влево/вправо, север/юг, восток/запад и т. д. Одного бита достаточно, чтобы определить, какой элемент из пары выбран. Например, мы можем присвоить «выключить» значение 0, а «включить» – 1, или наоборот. Главное, чтобы все согласились с таким определением.
На рис. 2.7 изображены тумблер питания на моем принтере и стандартный значок «вкл./выкл.», который встречается на многих устройствах. Это тоже символ из Unicode.
Одного бита достаточно, чтобы представить включение/выключение, истину/ложь и подобные двоичные выборы, но нам нужен способ для отображения более обширных диапазонов или более сложных концепций. Для этого мы используем группы битов – всевозможные комбинации нолей и единиц. Например, чтобы представить четыре года обучения в колледже США, возьмем два бита: первокурсник (00), второкурсник (01), третьекурсник (10) и старшекурсник (11). Если у нас появится еще одна категория, скажем, аспирант, то двух битов будет недостаточно – нам понадобится пять возможных значений, а комбинаций из двух битов только четыре. Трех нам хватит, и даже больше того: теперь у нас получится представить до восьми различных категорий, поэтому можно добавить профессуру, штатных преподавателей и научно-педагогических работников. Получатся следующие комбинации: 000, 001, 010, 011, 100, 101, 110 и 111.

Рис. 2.7. Тумблер питания и стандартный значок включения-выключения
Существует правило для соотнесения количества битов и максимального количества элементов, которые удастся обозначить ими. Взаимосвязь проста: если имеется N битов, то число различных способов их скомбинировать равняется 2N, то есть 2 × 2 ×… × 2 (N раз), как показано на рис. 2.8.

Рис. 2.8. Степени числа 2
Аналогичное правило применимо и к десятичным цифрам: если их взято N, то количество их уникальных комбинаций (которые мы называем числами) равно 10N (см. рис. 2.9).

Рис. 2.9. Степени числа 10
Поскольку все в компьютере обрабатывается в двоичном формате, такие свойства, как размеры и емкости, обычно выражаются в степенях двойки. Если у нас N битов, то возможных значений будет 2N, поэтому удобно знать степени двойки до некоторого значения, скажем, до 210. Совсем большие числа, конечно, уже не стоит запоминать. К счастью, есть простой способ – округление, как показано на рис. 2.10. Определенные степени двойки довольно близки к степеням десятки, причем это сходство упорядоченно и его легко запомнить. На той же иллюстрации показан еще один префикс размера – «пета», или 1015. В глоссарии в конце книги есть более подробная таблица с дополнительными единицами измерения.

Рис. 2.10. Степени чисел 2 и 10
Чем больше значения, тем заметнее разница, но даже при 1015 округление составляет всего 12,6 %, так что эта схема полезна в широком диапазоне. Вы обнаружите, что люди часто не делают больших различий между степенями 2 и 10 (особенно если это играет им на руку в чем-либо), поэтому «кило» или «1К» могут означать как тысячу, так и 210, то есть 1024. Разница обычно невелика, поэтому знать степени чисел 2 и 10 весьма полезно, когда вы проводите в уме расчеты с большими значениями, связанными с битами.
Последовательность битов может отображать число, если считать, что цифры, как обычно, расставлены по разрядам, только с основанием 2, а не 10. Десяти цифр от 0 до 9 достаточно, чтобы обозначить десять предметов. Если их больше, то нам понадобится больше разрядов. Так, с помощью двух десятичных цифр мы сможем обозначить до 100 предметов – от 00 до 99. Для более чем 100 предметов мы возьмем три разряда и получим 1000 комбинаций – от 000 до 999. Нужно отметить, что мы, как правило, не записываем начальные нули для чисел, но они подразумеваются. Кроме того, в повседневной жизни мы начинаем считать от единицы, а не от нуля.
Десятичные числа – это сокращенная запись для сумм степеней 10. Например, 1867 – это 1 × 103 + 8 × 102 + 6 × 101 + 7 × 10°, или 1 × 1000 + 8 × 100 + 6 × 10 + 7 × 1, или 1000 + 800 + 60 + 7. Вспомните сложение в столбик из начальной школы: единицы, десятки, сотни и так далее. Просто мы настолько привыкли к такому виду, что редко задумываемся об этом.
С двоичными числами все точно так же, только при основании 2, а не 10, поэтому используются лишь цифры 0 и 1. Двоичное число 11101 интерпретируется как 1 × 24 + 1 × 23 + 1 × 22 + 0 × 21 + 1 × 2°, которое при основании 10 выражается как 16 + 8 + 4 + 0 + 1, или 29.
Тот факт, что последовательности битов можно истолковывать как числа, означает, что есть органичная закономерность для присвоения элементам двоичных обозначений. Их располагают в порядке возрастания. Мы уже видели это выше, с индексами для первокурсника, второкурсника и так далее – 00, 01, 10, 11. В десятичной системе эти числа имеют значения 0, 1, 2 и 3. Следующая последовательность выглядела бы как 000, 001, 010, 011, 100, 101, ПО, 111 с числовыми значениями от 0 до 7.
Чтобы лучше это понять, выполним одно упражнение. Мы все умеем считать до десяти на пальцах, но до какого числа вы смогли бы досчитать, используя двоичные числа, где каждый палец (не просто так их назвали![18]18
В английском языке понятия «палец» и «цифра» могут обозначаться одним словом – digit.
[Закрыть]) представляет двоичную цифру? Какой получится диапазон значений? Если вы уже сообразили, на что похоже бинарное отображение 4 и 132, то уловили идею[19]19
При двоичном счете на пальцах 4 выглядит как выставленный средний палец на одной руке, а 132 – на обеих.
[Закрыть].
Как вы уже убедились, преобразовать двоичную систему в десятичную просто: сложите степени 2, для которых соответствующий бит числа равен 1. Преобразовать числа из десятичной системы в двоичную сложнее, но ненамного. Начните делить десятичное число на 2. Запишите остаток, который будет равняться 1 или 0, а полученный результат снова делите на два. Не останавливайтесь, пока число не будет равно нулю. Полученная последовательность остатков – это двоичное число, но сейчас оно записано в обратном порядке, так что «переверните» его.
В качестве примера на рис. 2.11 показано преобразование числа 1867 в двоичный формат. Читая биты в обратном порядке, мы получим 1110100 1011. Для проверки сложим степени двух: 1024 + 512 + 256 + 64 + 8 + 2 + 1 = 1867.
На каждом этапе деления мы вычисляем наименее значимый (крайний правый) бит оставшегося числа. Эта процедура аналогична тому, как мы преобразовываем большое количество секунд в дни, часы, минуты и секунды: сначала делим число на 60 и получаем минуты (остаток – количество секунд), делим результат на 60 и получаем часы (остаток – количество минут), делим новый результат на 24 и получаем дни (остаток – количество часов). Разница в том, что при таком расчете времени используется не одинаковое, а смешанное основание – 60 и 24.

Рис. 2.11. Преобразование десятичного числа 1867 в двоичное 11101001011
Вы можете также преобразовать десятичное число в двоичное, вычитая из исходного числа убывающие степени двух. Начать нужно с высшей степени 2, которую содержит число, – например, 210 в 1867. Каждый раз при вычитании степени записывайте 1 или, если ее значение больше остатка, 0, как в случае с 27 или 128 в примере выше. Итоговая последовательность единицы и нолей даст вам двоичное значение. Этот подход, пожалуй, более наглядный, а не механический.
Бинарная арифметика проста. Поскольку для работы требуются всего две цифры, в таблицах сложения и умножения есть только два ряда и две колонки, как показано на рис. 2.12. Маловероятно, что вам когда-либо придется совершать арифметические операции с двоичными числами самостоятельно, однако сама простота этих таблиц дает понять, почему компьютерные схемы на основе двоичной арифметики намного проще, чем они получались бы с применением десятичной.

Рис. 2.12. Таблицы сложения и умножения в двоичной системе