Основы информационных технологий для неспециалистов: что происходит внутри машин — страница 6 из 26

Если используется основание 2, то результирующие числа можно назвать двоичными цифрами или, более кратко, битами[13] это слово предложил использовать Дж. У Тьюки.

Клод Шеннон.

Математическая теория связи[14], 1948

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

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

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

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

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

2.1. Различия аналоговой и цифровой форм

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

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

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

Представьте себе спидометр в автомобиле. У меня в машине традиционный аналоговый спидометр, стрелка которого перемещается размеренно и прямо пропорционально скорости движения. Переходы от одного значения скорости к другому совершаются плавно и без прерываний. Но в машине есть также цифровой дисплей, который показывает скорость с точностью до мили (или километра) в час. Если вы начнете двигаться немного быстрее, то число на нем поменяется с 65 на 66. Если поедете чуть медленнее – вернется к 65. Но он никогда не отобразит значение 65,5.

Представьте себе термометр. Те из них, что со столбиком красной жидкости (обычно подкрашенного спирта) или ртути, – аналоговые. Жидкость в них расширяется или сжимается прямо пропорционально изменению температуры, поэтому небольшое изменение температуры вызовет такое же небольшое изменение высоты столбика. А вот устройство на стене здания, высвечивающее «37°», – цифровое. У него числовой дисплей, который будет отображать 37 градусов при любой температуре между З6½ и 37½.

Это может привести к курьезным ситуациям. Год назад я ехал по шоссе в США на расстоянии приема радиосигнала из Канады, где используется метрическая система, и слушал радио. Диктор, стараясь угодить всей своей аудитории, сказал: «За последний час температура по Фаренгейту повысилась на один градус, а температура по Цельсию не изменилась».

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

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

2.2. Аналого-цифровое преобразование

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

2.2.1. Оцифровка изображений

Преобразование изображений в цифровую форму – возможно, самое простое наглядное объяснение процесса. Предположим, мы сфотографировали своего кота (рис. 2.1).

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


Рис. 2.1. Фотография кота, 2020 год


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

Каждый элемент матрицы датчиков представляет собой три детектора, которые измеряют количество красного, зеленого и синего света. Одна такая группа называется пикселем, или элементом изображения[15]. Если размер изображения составляет 4000 на 3000 пикселей, то в нем двенадцать миллионов элементов изображения, или двенадцать мегапикселей, – немного, по меркам современных цифровых фотоаппаратов. «Окраска» пикселя обычно определяется тремя значениями, которые соответствуют интенсивности красного, зеленого и синего цветов, поэтому для изображения размером 12 мегапикселей в сумме записывается 36 миллионов значений интенсивности света. На экране картинка отображается с помощью множества троек красных, зеленых и синих огоньков, уровень яркости которых задается соответствующими значениями в пикселе. Если вы посмотрите на экран телефона, компьютера или телевизора через увеличительное стекло, то разглядите отдельные пятнышки, подобно показаным на рис. 2.2, только цветные. Если вы подойдете достаточно близко к экранам стадионов или цифровых рекламных щитов, то увидите такую же картинку.


Рис. 2.2. RGB-пиксели

2.2.2. Оцифровка звука

Второй пример аналого-цифрового преобразования – обработка звука, в особенности музыкальных произведений. Цифровая музыка хороша для изучения, потому что она стала одной из первых областей, где свойства цифровой информации привели к важным последствиям в социальном, экономическом и юридическом аспектах. В отличие от виниловых пластинок или аудиокассет, цифровую музыку можно без искажений перенести на каждое домашнее устройство сколько угодно раз, а точные копии отправить в любую точку мира по интернету, где их тоже получат в безупречном виде. И всё бесплатно. Индустрия звукозаписи увидела в этом серьезную угрозу и начала кампанию на юридическом и политическом фронтах, стремясь остановить копирование. Война не окончена – стычки все еще происходят в судах и на политических аренах, – но возникновение стриминговых музыкальных сервисов, таких как 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]). Размер файла уменьшается в 10 раз, а ухудшение качества почти неуловимо. Для изображений наиболее распространена техника сжатия JPEG, названная в честь организации-изобретателя – Joint Photographic Experts Group (Совместная экспертная группа по фотографии). С ее помощью можно уменьшить файл картинки в 10 и более раз. Сжатие – один из примеров обработки, которую можно применить к цифровой информации, но чрезвычайно сложно (а то и невозможно) к аналоговой. Подробнее мы обсудим сжатие в главе 8.

2.2.3. Оцифровка фильмов

А что насчет фильмов? В 1870-х годах английский фотограф Эдвард Мейбридж показал, как создать иллюзию движения, быстро и последовательно перемещая статичные снимки. Сегодня в кинофильмах изображения прокручиваются со скоростью 24 кадра в секунду, а в телепередачах – от 25 до 30 кадров в секунду. Это достаточно быстро, чтобы человеческий глаз воспринимал последовательность картинок как непрерывное движение. Для видеоигр данный показатель обычно составляет 60 кадров в секунду, тогда как в старых кинолентах он равен 10, поэтому в них заметно мерцание. О таком искажении нам напоминают давнее обозначение для фильмов (англ, flicks – «мерцание») и современное название Netflix.

В цифровом представлении фильма сочетаются и синхронизируются звуковые и графические компоненты24. Здесь сжатие можно применить, чтобы уменьшить запрашиваемый объем пространства, как в стандартных форматах вроде MPEG (Moving Picture Experts Group[17]). Ha практике отобразить видео в числах тяжелее, чем аудио. Среди причин – то, что оно сложнее по своей сути, а также то, что большая часть видеозаписей основывается на стандартах широковещательного телевидения, которое почти всегда существовало в аналоговой форме. Сейчас аналоговое ТВ постепенно сворачивается в большинстве стран мира. В США телевещание перевели на цифровой формат в 2009 году, в других странах этот процесс находится на тех или иных стадиях.

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

2.2.4. Оцифровка текста

Некоторые виды информации легко представить в цифровой форме, поскольку не требуется никаких преобразований, кроме согласования формата записи. Рассмотрим обычный текст – набор символов алфавита, цифр и знаков препинания, как в этой книге. Мы могли бы присвоить уникальный номер каждой отдельной букве: А равно 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.

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

2.3.1. Биты

Биты – наиболее элементарный способ представления цифровой информации. Как отмечено в цитате в начале этой главы, «бит» – это сокращение от слов «двоичное число» (англ, 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

2.3.2. Степени чисел 2 и 10

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


Рис. 2.10. Степени чисел 2 и 10


Чем больше значения, тем заметнее разница, но даже при 1015 округление составляет всего 12,6 %, так что эта схема полезна в широком диапазоне. Вы обнаружите, что люди часто не делают больших различий между степенями 2 и 10 (особенно если это играет им на руку в чем-либо), поэтому «кило» или «1К» могут означать как тысячу, так и 210, то есть 1024. Разница обычно невелика, поэтому знать степени чисел 2 и 10 весьма полезно, когда вы проводите в уме расчеты с большими значениями, связанными с битами.

2.3.3. Двоичные числа

Последовательность битов может отображать число, если считать, что цифры, как обычно, расставлены по разрядам, только с основанием 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]) представляет двоичную цифру? Какой получится диапазон значений? Если вы уже сообразили, на что похоже бинарное отображение 4 и 132, то уловили идею[19].

Как вы уже убедились, преобразовать двоичную систему в десятичную просто: сложите степени 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. Таблицы сложения и умножения в двоичной системе

2.3.4. Байты

Во всех современных компьютерах базовой единицей обработки и организации памяти являются восемь бит, которые рассматриваются как единое целое. Группа из восьми бит называется байтом. Это слово ввел в 1956 году Вернер Бухгольц, разработчик архитектуры ЭВМ, работавший в IBM. Одним байтом можно закодировать 256 различных значений (28, то есть все уникальные комбинации из восьми нулей и единиц) – например, целые числа от 0 до 255, или 7-битный символ из ASCII (с одним битом в запасе), или что-то еще. Часто конкретный байт входит в более крупную группу, которая отображает что-то более объемное или сложное. Два байта вместе дают 16 бит, чего достаточно для представления числа от 0 до (216 – 1), или 65 535. Они также могут отображать символ из набора Unicode, скажем, из записи названия «Токио», первый или второй в слове. На каждый иероглиф отведено по два байта. Четыре байта – это 32 бита, которые могут определять четыре символа ASCII, или два символа Unicode, или числа до (232 – 1), что составляет около 4,3 миллиарда. Байтами допустимо отображать что угодно, однако сам процессор имеет довольно скромный набор групп – в частности, целые значения различного размера, – а также располагает инструкциями для их обработки.

Если мы хотим записать числовое значение, представленное одним или несколькими байтами, его допустимо выразить в десятичной форме, что удобно для чтения человеком (только если оно точно числовое). Мы можем записать его в двоичной системе, чтобы увидеть отдельные биты: это важно, поскольку разные биты кодируют разные типы информации. Однако двоичная система громоздка, и такие представления более чем втрое длиннее десятичных, поэтому обычно используется альтернативная система счисления, называемая шестнадцатеричной25. Для записи чисел с таким основанием применяются 16 цифр (по аналогии с 10 цифрами для десятичной и 2 для двоичной) – 0,1… 9, A, B, C, D, E и F. Каждая шестнадцатеричная цифра представляет собой 4 бита, числовые значения которых приведены на рис. 2.13.


Рис. 2.13. Таблица шестнадцатеричных цифр и их значений в двоичной системе исчисления


Если вы не программист, то шестнадцатеричный код встречается вам лишь в нескольких местах. Одно из них – краски на веб-странице. Как я упоминал выше, в наиболее распространенном представлении цветов на компьютере используется три байта на каждый пиксель: по одному для красного, зеленого и синего. Эта система кодирования называется RGB (Red, Green, Blue). Каждый из таких компонентов хранится в виде одного байта, поэтому существует 256 различных значений (оттенков) красного, на любой из которых приходится 256 возможных значений зеленого, а на всякую их комбинацию – 256 оттенков синего. В общей сложности получаем 256 × 256 × 256 возможных цветов, что звучит внушительно. Давайте прибегнем к степеням двух и десяти, чтобы быстро прикинуть количество. Это 28 × 28 × 28, что равно 224, или 24 × 220, или примерно 16 × 106, или 16 миллионов. Вероятно, это число попадалось вам в описаниях компьютерных дисплеев («Более 16 миллионов цветов!»)26. Кстати, оценка занижена примерно на 5 %, ведь 224 в десятичной записи – 16 777 216.

Насыщенный красный представлен числом FF0000, то есть максимальным значением из 255 возможных, если брать десятичную систему. В нем нет ни зеленого, ни синего. А вот яркий, но негустой синий цвет, которым выделяются ссылки на многие веб-страницы, кодируется как 000 °CC. Желтый цвет – это смесь красного и зеленого, и его самый яркий оттенок выражается комбинацией FFFF00. Оттенки серого содержат в себе равное количество красного, зеленого и синего. Например, средний серый пиксель будет закодирован числом 808080, в котором содержание всех трех цветов будет одинаковым. Наконец, черный и белый – это 000000 и FFFFFF соответственно.

Шестнадцатеричные значения также используются в кодовых таблицах Unicode для определения символов. Например, –   это 6771 4EAC. Кроме того, вы можете встретить шестнадцатеричные числа в адресах Ethernet, о которых мы поговорим в главе 8, и в специальных символах в URL-адресах – это глава 10.

В рекламе компьютеров вы иногда встречаете понятие «64-битный» («Microsoft Windows 10 Ноше 64-битная»). Что это значит? Внутри себя компьютеры обрабатывают данные в виде блоков разного размера, в которые входят как числа – а для них удобнее применять 32 и 64 бита, – так и адреса, то есть указания, где расположена информация в оперативной памяти. Речь в рекламе идет о втором параметре. Тридцать лет назад произошел переход от 16-битных адресов к 32-битным, которые достаточно велики для доступа к 4 Гб памяти. В настоящее время мы почти перешли от 32 к 64 битам в компьютерах общего назначения27. Не стану предсказывать, когда мы двинемся от 64 к 128 битам: пока все на какое-то время затихнет.

Из этого обсуждения битов и байтов нам важно запомнить, что значение группы битов зависит от контекста: вам не удастся определить, что они отображают, просто посмотрев на них. Например, в байт может входить один бит, представляющий истину или ложь, а семь других не будут использоваться. Там может храниться небольшое целое число или символ ASCII, такой как #. Возможно, что байт составляет либо часть символа в другом алфавите, либо компонент большого числа из 2, 4 или 8 байт, либо фрагмент изображения или музыки на DVD, либо часть инструкции для процессора и так далее. (С десятичными цифрами все то же самое. В зависимости от контекста, трехзначное число может обозначать телефонный код района США, номер шоссе, показатель отбивания в бейсболе и многое другое.)

Инструкции для одной программы иногда служат данными для другой. Когда вы загружаете программу или приложение, то они представляют собой просто данные – биты, копируемые вслепую. Но когда вы запускаете программу, ее биты при обработке в ЦПУ воспринимаются как инструкции.

2.4. Краткие выводы

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

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

Двоичные значения также используются в повседневных занятиях, не связанных с компьютерами. Вероятно, дело в том, что такие расчеты, как удвоение или уменьшение веса, длины и тому подобного, вполне естественны для людей. Например, во втором томе книги Дональда Кнута «Искусство программирования»28 описаны английские единицы тары для вина 1300-х годов, в которые входят 13 двоичных порядков величины: 2 джилла – это один шопен, 2 шопена – это одна пинта, 2 пинты – это одна кварта, и так далее, пока 2 барреля не станут одним хогсхедом, 2 хогсхеда не сольются в одну пипу (или пайп), а 2 пипы не образуют один тан. Около половины этих единиц все еще используются в английской системе мер для жидкостей, хотя такие очаровательные слова, как «феркин» и «килдеркин» (два феркина, или половина барреля), ныне встречаются уже редко.

3. Процессор изнутри