Представление данных в памяти персонального компьютера (числа, символы, графика, звук)
Как мы хорошо знаем, вычислительная техника первоначально возникла как средство автоматизации вычислений, о чем совершенно недвусмысленно говорит название ЭВМ. Следующим видом обрабатываемой информации стала текстовая. Сначала тексты просто поясняли труднообозримые столбики цифр, но затем машины все более и более существенным образом стали преобразовывать текстовую информацию. Обязательной частью программного обеспечения стал текстовой редактор. Естественно, что оформление текстов достаточно быстро вызвали у людей стремление дополнить их графиками и рисунками. Делались попытки частично решить эти проблемы в рамках символьного подхода: вводились специальные символы для рисования таблиц и диаграммам (их называли псевдографическими; вспомните панели знаменитого Norton Commander, которые созданы именно этим способом). Но практические потребности людей в графике делали ее появление среди видов компьютерной информации неизбежной. Числа, тексты и графика образовали некоторый относительно замкнутый набор, которого было достаточно для многих решаемых на компьютере задачи. Наконец, относительно недавно постоянный рост быстродействия вычислительной техники создал широкие технические возможности для обработки звуковой информации, а также для быстро сменяющихся изображений (видео) – компьютер стал мультимедийным.
Основные принципы двоичного кодирования четко и понятно сформулированы в пособии для учителя [1]. Пусть мы хотим произвести кодирование в двоичном алфавите A некоторой величины, имеющей конечное множество значений B. B – это, разумеется, тоже своеобразный алфавит, поэтому в наиболее абстрактном виде задача состоит в формулировке правил замены символов алфавита B символами алфавита A. Правила эти можно сформулировать следующим образом:
двоичный алфавит A содержит только два символа – 0 и 1;
каждой букве алфавита B ставится в соответствие определенный (вообще говоря, произвольный) двоичный код;
двоичные коды различных букв алфавита B обязательно должны быть различны, иначе нарушится однозначность кодирования;
двоичные коды букв данного алфавита B должны иметь одинаковое число двоичных букв (например, число 1 в 32-разрядной машине дополнительно содержит слева 31 незначащий ноль и только затем единичку).
И еще один вопрос хочется обсудить, прежде чем переходить к конкретным видам информации. Речь идет о дискретной и непрерывной (часто говорят аналоговой) информации. Это довольно сложный философский вопрос, поэтому мы постараемся не углубляться в него сильно без особой необходимости.
Итак, согласно строгому определению математического словаря [2], "дискретность (от лат. discretus – разделенный, прерывистый) – прерывность; противопоставляется непрерывности. Напр., дискретное изменение к.-л. величины во времени – это изменение, происходящее через определенные промежутки времени (скачками); система целых (в противоположность системе действительных чисел) является дискретной".
Заметим, что в приведенной цитате указано на связь дискретности с системой целых чисел, и это можно считать подтверждением положения о том, что дискретные значения можно пронумеровать.
Для большей наглядности дополним данное определение рядом примеров. Дискретными являются показания цифровых измерительных приборов, например, вольтметра (сравните со "старыми", стрелочными приборами). Очевидным (в самом изначальном смысле этого слова!) образом дискретной является распечатка матричного принтера, а линия, проводимая графопостроителем, напротив, является непрерывной. Дискретным является растровый способ представления изображений, тогда как векторная графика по своей сути непрерывна. Дискретна таблица значений функции, но когда мы наносим точки из нее на миллиметровую бумагу и соединяем плавной линией, получается непрерывный график. Механический переключатель диапазонов в приемниках был сконструирован так, чтобы он принимал только фиксированные положения, а вот регулятор громкости вращался плавно, т.е. непрерывно (возможно, не самый наглядный пример, т.к. сейчас, наверное, некоторые школьники уже с трудом представляют себе иные регулировки, кроме цифровых).
Тем не менее, все не так просто. То, что фотографии в старых газетах дискретны, видят и соглашаются все. А в современном красочном глянцевом журнале? А распечатка картинки на лазерном принтере – она дискретна или непрерывна (все-таки, она состоит из частичек специального порошка, а они маленькие, но конечные по размеру; да и сама характеристика dpi – количество точек на единицу площади наводит на сомнения в непрерывности картинки, хотя глаз упорно не видит дискретности)? Если еще в этот момент вспомнить, что твердые тела состоят из мельчайших атомов, а глаз, воспринимающий изображение, имеет чувствительные маленькие палочки и колбочки, то все вообще станет туманным и неоднозначным…
Видимо, чтобы не запутаться совсем, надо принять правило, что в тех случаях, когда рассматривая величина имеет настолько большое количество значений, что мы не в состоянии их различить, то практически ее можно считать непрерывной. Например, пока dpi сканера значительно хуже, чем у лазерного принтера, напечатавшего эту картинку, он не увидит ее "зернистости" и нам приходится считать картинку непрерывной. Аналогично издали современный жилой массив кажется нам сплошной стеной, но, подойдя к нему поближе, мы начинаем различать отдельные дома и даже пространство между ними.
Какое отношение приведенные выше рассуждения имеют к хранению информации в компьютере? Самое непосредственное! Компьютер по определению способен хранить только дискретную информацию. Его память, как бы велика она не была, состоит из отдельных битов, а значит дискретна. А из этого немедленно следует, что существует проблема преобразования естественной информации в пригодную для компьютера дискретную форму. В литературе ее называют проблемой дискретизации или квантования информации.
Названная проблема всегда рассматривается при изложении принципов хранения звуковой информации, но обычно умалчивается во всех остальных случаях. Только в одном учебнике [1] удалось найти упоминание о дискретизации как об общей проблеме кодирования. Причем простое и доступное объяснение сопровождалось довольно удачным рисунком, аналог которого приводится ниже. Непрерывная величина ассоциируется с графиком функции, а дискретная – с таблицей ее значений. При рассмотрении этих двух объектов разной природы делается вывод о том, что с уменьшением интервала дискретизации (или, что то же самое, с увеличением количества точек в таблице) различия между ними существенно уменьшаются. Последнее означает, что при таких условиях дискретизированная величина хорошо описывает исходную (непрерывную).
Теперь, когда наиболее общие принципы преобразования информации при вводе в компьютер нам понятны, рассмотрим как реализуются эти принципы для конкретных видов информации.
Целые числа. Как мы уже знаем, этот тип информации является дискретным и преобразуется для хранения в компьютере довольно просто: достаточно перевести число в двоичную систему счисления. Некоторые особенности будет иметь кодирование целых отрицательных чисел, но мы их рассмотрим в вопросе, связанном с представлением числовой информации.
Вещественные числа. В отличие от целых, вещественные числа являются непрерывными. Следствием из этого является возможность дальнейшего деления любого сколь угодно малого числа, что приводит, вообще говоря, к бесконечному числу разрядов в изображении числа .Для того, чтобы в ЭВМ как-то представить числа в виде конечного набора двоичных цифр, приходится ограничиваться определенной точностью и младшие разряды просто игнорировать. Отсюда могут возникать некоторые принципиальные проблемы, например, при сравнении двух вещественных значений на равенство. Хорошо известен, например, следующий "счетный" эффект. Возьмем отрезок от 0 до 1 и разделим его на N равных частей, например, на 1000; тогда величина каждой части h=1/N. Выполним по отрезку ровно N шагов, вычисляя каждый раз значение аргумента по формуле X=X+h. По идее, последнее значение X=Nh должно равняться единице, однако на практике точного равенства, как правило, не будет, а значение X будет чуть-чуть меньше. Учтите на будущее этот парадокс и всячески старайтесь избегать сравнения вещественных чисел на равенство.
Символы. Это еще одна дискретная величина, поскольку компьютер оперирует с определенным ограниченным набором символов. Такой набор вполне можно назвать алфавитом машины, а в алфавите все символы имеют свои фиксированные позиции. Отсюда основная идея хранения символов в памяти ЭВМ состоит в замене каждого из них номером в алфавите, т.е. числом.
Помимо такого очевидного достоинства, как компактность хранения, замена символа его номером имеет и определенные недостатки. В частности, текст может быть правильно воспроизведен на другом компьютере только в том случае, если алфавиты обоих компьютеров совпадают. И если для латинских букв, на которые существует единый стандарт, это совсем не жесткое требование, то с русскими текстами дело обстоит заметно хуже. Достаточно сказать, что даже в пределах одного компьютера кодировка русских букв в операционных системах MS-DOS и Windows различна. Несколько утешает тот факт, что задача перекодировки текста является очень простой, и, если правильно указать исходную и требуемую кодировку, прекрасно решается автоматически.
При выводе символа компьютер по номеру определяет, как его надо изобразить на экране или на бумаге. Раньше для каждого символа хранилась его растровая картинка, т.е. некоторая матрица из черных и белых точек, окрашенных в соответствии с начертанием символа. Учитывая, что размеры всех символов были одинаковыми, ориентироваться в такой таблице (ее было принято по научному называть знакогенератором) компьютеру было нетрудно. Главным недостатком подобного метода вывода текста было то, что начертания букв и их размер оказывались жестко зафиксированными. На первых порах с этим мирились, но постоянное увеличение обработки текстов на компьютере потребовало новых принципов организации шрифтов. На современном этапе для каждого символа хранится не его начертание, а своеобразная программа, его порождающая (векторный способ создания изображений). Геометрические параметры этих "программ" могут легко изменяться, что обеспечивает быстрое и удобное масштабирование шрифтов.