Представление чисел в двоичном коде

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

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

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

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

Число Двоичный код
0000 0000
0000 0001
0000 0010
0000 0011
1111 1111

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

Если нужны и отрицательные числа, то знак числа может быть закодирован отдельным битом, обычно это старший бит; ноль интерпретируется как плюс, единица как минус. В таком случае одним байтом может быть закодированы целые числа в интервале от –127 до +127, причем двоичная арифметика будет несколько усложнена, т.к. в этом случае существуют два кода, изображающих число ноль 0000 0000 и 1000 0000, и в компьютерах на аппаратном уровне это потребуется предусмотреть. Рассмотренный способ представления целых чисел называется прямым кодом. Положение с отрицательными числами несколько упрощается, если использовать, так называемый, дополнительный код. В дополнительном коде положительные числа совпадают с положительными числами в прямом коде, отрицательные же числа получаются в результате вычитания из 1 0000 0000 соответствующего положительного числа. Например, число –3 получит код

_ 1 0000 0000

0000 0011

1111 1101

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

+ 0000 0101

1111 1101

1 0000 0010, т.е. отбрасывая подчеркнутый старший разряд получим 2

Аналогично целые числа от 0 до 65536 и целые числа от -32768 до 32767 в двоичной (шестнадцатеричной) системе счисления представляются в двухбайтовых ячейках. Существуют представления целых чисел и в четырехбайтовых ячейках.

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

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

X = m · qp, где

m — мантисса числа,

q – основание системы счисления,

p — целое число, называемое порядком.

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

Т.е. число 1234.56 может быть записано в одном из видов

1234.56=123,456*101=12,3456*102 =1,23456*103 =0,123456*104

Очевидно, такое представление не однозначно. Если мантисса 1/q£|m|<q (0,1£|m|<1 для десятичной системы счисления), то представление числа становится однозначным, а такая форма называется нормализованной. Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, т.е. максимальная точность.

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

Представление чисел в двоичном коде - student2.ru

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

Так как порядок может быть положительным или отрицательным, нужно решить проблему его знака. Величина порядка представляется с избытком, т.е. вместо истинного значения порядка хранится число, называемое характеристикой (или смещенным порядком). Для получения характеристики необходимо к порядку прибавить смещение. Например, при использовании для хранения порядка восьми бит, для хранения значений от –128 до +127 используется смещение 128. Тогда для представления порядка будут использоваться значения от 0 до +255, т.е. только неотрицательные числа.

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

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

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

Как и в случае целых чисел, в программных системах могут использоваться несколько типов данных, реализующих модель с плавающей точкой. Например, в языке Си применяются три типа данных с разной “длиной”. Шестнадцати разрядные компиляторы для IBM-совместимых персональных компьютеров реализуют эти типы следующим образом.

float — 4 байта, из них 23 разряда мантиссы и 8 битов порядка (от 3.4*10–38 до 3.4*10+38, обеспечивает точность с 7 значащими цифрами);

double — 8 байтов, из них 52 разряда мантиссы и 11 битов порядка (от 1.7*10–308 до 1.7*10+308, обеспечивает точность с 15 знаками);

long double — 10 байтов, из них 65 разрядов мантиссы и 14 битов порядка (от 3.4*10–4932 до 3.4*10+4932, обеспечивает точность с 19 знаками).

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

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

1.3.2. Представление символьных и текстовых данных

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

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

Рассмотрим последовательно, как кодируются символы, элементы текстов, текстовые документы.

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

Наиболее популярная таблица ASCII разработана институтом стандартизации США в 1981 г. Ее использовали, в частности, программные продукты, работающие под управлением операционной системы MS-DOS. Для представления одного символа используется один байт (8 бит), т.е. кодовая таблица описывает 28 =256 различных кодов.

Коды с 0 до 127 составляют базовую (основную) таблицу; коды со 128 по 255 расширенную (дополнительную) таблицу.

В основной таблице располагаются управляющие команды для принтеров (коды 0 – 31 «перевод строки», «возврат каретки», им не соответствуют символы), затем спецсимволы, знаки арифметических действий и знаки препинания, цифры, латинские буквы - прописные и строчные.

Дополнительная таблица отдана национальным алфавитам, символам псевдографики (с помощью которых форматируются таблицы).

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

Во многих странах Азии 256 кодов явно не хватило. В 1991 году производители программных продуктов (Microsoft, IBM, Apple) и стандартизаторы пришли к соглашению о выработке единого стандарта ISO 10646-1 (он же Unicode 3.0). Код построен по 31 битной схеме, но используются только два байта для кодирования одного символа. Два байта 16 бит создает 216 = 65536 кодов, которые описывают цифры, буквы латинского и многих национальных алфавитов, спецсимволы, знаки арифметических операций и т.д. Все текстовые документы в этой кодировке длинее вдвое, что сначала задерживало ее внедрение, но современный уровень технических средств допускает такую возможность. В настоящее время распространенный текстовый редактор Word, начиная с версии Word 8.0 (Microsoft Office 97) использует шрифты Unicode 3.0.

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

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

1.3.3. Представление звуковых данных в двоичном коде

Звук – это упругая продольная волна в воздушной среде. Чтобы ее представить в виде, читаемом компьютером, необходимо выполнить следующие преобразования (рис. 1.4.). Звуковой сигнал преобразовать в электрический аналог звука с помощью микрофона. Электрический аналог получается в непрерывной форме и не пригоден для обработки на цифровом компьютере. Чтобы перевести сигнал в цифровой код, надо пропустить его через аналого-цифровой преобразователь (АЦП). При воспроизведении происходит обратное преобразование цифро-аналоговое (через ЦАП). Позже будет показано, что конструктивно АЦП и ЦАП находятся в звуковой карте компьютера.

 
  Представление чисел в двоичном коде - student2.ru

Во время оцифровки сигнал дискретизируется по времени и по уровню (см. рис.1.5.). Дискретизация по времени выполняется следующим образом: весь период времени T разбивается на малые интервалы времени Dt, точками t1,t2…tn . Предполагается, что в течение интервала Dt уровень сигнала изменяется незначительно и может с некоторым допущением считаться постоянным. Величина n=1/Dt называется частотой дискретизации. Она измеряется в герцах (гц) – количество измерений в течение секунды.

Дискретизация по уровню, она еще называется квантованием, выполняется так: область изменения сигнала от самого малого значения Xmin до самого большого значения Xmax разбивается на N равных квантов, промежутков величиной

Представление чисел в двоичном коде - student2.ru DX=( Xmax- Xmin)/N

Точками X1,X2,…Xn. Xi=Xmin+DX×(i-1)

Каждый квант связывается с его порядковым номером, т.е. целым числом, которое легко может быть представлено в двоичной системе счисления. Если сигнал после дискретизации по времени (напомним, его принимаем за постоянную величину) попадает в промежуток Xi-1£X£ Xi, то ему в соответствие ставится код i.

 
  Представление чисел в двоичном коде - student2.ru

Возникают две задачи:

- первая; как часто по времени надо измерять сигнал,

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

Ответ на первую задачу дает теорема Найквиста, которая утверждает, что, если сигнал оцифрован с частотой n, то высшая «слышимая» частота будет не более n/2. Вторая задача решается подбором числа уровней так, чтобы звук не имел высокого уровня шума и «электронного» оттенка звучания (точнее это характеризуется уровнем нелинейных искажений). Попутно заметим, что число уровней берется как 2n. Чтобы измерение занимало целое число байт; n выбирают n=8 или n=16, т.е. каждое измерение занимает один или два байта.

Высокое качество воспроизведения получается в формате лазерного аудио диска при следующих параметрах оцифровки: частота дискретизации - 44.1 кгц, квантование - 16 бит, т.е. Dx=(Xmax-Xmin)/216 . Таким образом, 1 сек. стерео звука займет

2байт*44100байт/сек*2кан*1сек=176 400 байт дисковой памяти. Качество звука при этом получается очень высоким.

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

1 байт*8000байт/сек*1сек=8000 байт

1.3.4. Представление графических данных в двоичном коде

Есть два основных способа представления изображений.

Первый - графические объекты создаются как совокупности линий, векторов, точек - называется векторной графикой.

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

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

1. закон 3х-мерности - любой цвет может быть представлен комбинацией трех основных цветов;

2. закон непрерывности - к любому цвету можно подобрать бесконечно близкий;

3. закон аддитивности - цвет смеси зависит только от цвета составляющих.

За основные три цвета приняты красный (Red), зеленый (Green), синий (Blue). В модели RGB любой цвет получается в результате сложения основных цветов. Каждый составляющий цвет при этом характеризуется своей яркостью, поэтому модель называется аддитивной. Эта схема применяется для создания графических образов в устройствах, излучающих свет – мониторах, телевизорах.

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

голубой (Cyan=B+G), дополняющий красного;

пурпурный (Magenta=R+B) дополняющий зеленого;

желтый (Yellow=R+G) дополняющий синего.

Но т.к. цветные красители по отражающим свойствам не одинаковы, то для повышения контрастности применяется еще черный (blacK). Модель CMYK названа по первым буквам слов Cyan, Magenta, Yellow и последней букве слова blacK. Т.к. цвета вычитаются, модель называется субстрактивной.

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

Если для кодирования яркости каждой точки использовать по одному байту (8 бит) на каждый из трех цветов (всего 3*8=24 бита), то система обеспечит представление 224»16.7 млн. распознаваемых цветов, что близко цветовосприятию человеческого зрения. Режим представления цветной графики двоичным кодом из 24 разрядов называется полноцветным или True Color. Очевидно, графические данные также как и звуковые занимают очень большие объемы на носителях. Например, скромный по современным меркам экран монитора имеет растр 800´600 точек, изображение представленное в режиме True Color займет

800´600´3= 1 440 000 байт.

В случае, когда не требуется высокое качество отображения цвета, применяют режим High Color, который кодирует одну точку растра двумя байтами (16 разрядов дают 216 »65.5 тысячи цветов).

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

1.3.5. Понятие сжатия информации

Еще одна проблема, тесно связанная с моделями представления информации - сжатие информации.

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

Разработаны и применяется два типа алгоритмов сжатия: сжатие с изменением структуры данных (оно происходит без потери данных) и сжатие с частичной потерей данных. Алгоритмы первого типа предусматривают две операции: сжатие информации для хранения, передачи и восстановление данных точно в исходном виде, когда их требуется использовать. Такой тип сжатия применяется, например, для хранения текстов (наиболее известны алгоритмы Хаффмена и Лемпеля-Зива). Алгоритмы второго типа полностью восстановить оригинал не позволяют и, потому применяются для хранения графики или звука, для текстов, чисел или программ они неприменимы.

Структуры данных

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

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

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

Если элементы списка одной длины, структура называется вектором данных, разделители не требуются. При длине одного элемента - d, зная номер элемента - n, его начало определяется соотношением d (n-1)

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

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

Поиск, аналогично линейной структуре, осуществляется по разделителям. Если элементы таблицы одной длины, структура называется матрицей данных, разделители в ней не требуются. При длине одного элемента - d, зная номер строки -m и номер столбца n, и зная число строк и столбцов M,N, найдем адрес его начала.

d [N(m-1)+(n-1)]

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

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

Иерархическую структуру образуют, например, почтовые адреса (см. рис. 1.6.)

Представление чисел в двоичном коде - student2.ru Представление чисел в двоичном коде - student2.ru Россия

 
  Представление чисел в двоичном коде - student2.ru

Представление чисел в двоичном коде - student2.ru Представление чисел в двоичном коде - student2.ru Представление чисел в двоичном коде - student2.ru Представление чисел в двоичном коде - student2.ru Краснодарский край Ростовская область Ставропольский край

Представление чисел в двоичном коде - student2.ru Представление чисел в двоичном коде - student2.ru Представление чисел в двоичном коде - student2.ru Семикорокорский район Ростов Красносулинский район Белокаменский район

Ворошиловский Большая Садовая Будёновский

Рис. 1.6. Пример иерархической структуры данных.

Адрес одного из домов, расположенных, к примеру на улице Большая Садовая, может выглядеть следующим образом:

Россия\ Ростовская область\ Ростов\ ул Большая Садовая \д 1

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

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

Хранение данных

При хранении данных решаются две задачи:

- как сохранить данные;

- как обеспечить быстрый удобный доступ к ним.

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

Файл - это поименованная область на внешнем носителе, содержащая данные произвольной длины (любое число байтов, может быть и нуль), обладающая уникальным собственным именем

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

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

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

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

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

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

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

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

Некоторые форматы файлов стандартизированы и должны поддерживаться любой операционной системой и работающими в ней приложениями (например, графические файлы, определенные спецификациями GIF или JPEG). Наряду с этим всегда имеются форматы, специфичные только для данной системы (например, исполняемые файлы MS DOS или Windows). Кроме того, есть еще форматы, разработанные для конкретных приложений, работающих под управлением данной операционной системы (например, формат .xls, используемый MS Excel). И, наконец, в некоторых случаях при разработке приложений новые форматы приходится создавать самим программистам.

Структура файла может быть тривиальной. Например, текст может сохраняться в виде последовательности байтов, прямо соответствующих составляющим его литерам (формат plain text или ASCII-файл). Однако в большинстве случаев вместе с данными приходится сохранять и некоторую дополнительную информацию. Рассмотрим примеры характерных ситуаций.

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

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

Продемонстрируем это на простом примере. Предположим, что нам нужно сохранить таблицу из шести чисел, имеющую две строки и три столбца (2*3):

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

Таблица, содержащая шесть чисел, может быть образована разным количеством строк и столбцов: 1*6, 2*3, 3*2 и 6*1. Очевидно, что если таблица запоминается построчно, то основным параметром, определяющим ее вид, становится количество чисел в строке таблицы (т.е. количество столбцов). Поэтому договариваемся о следующем формате: первое число в файле — это длина строки таблицы, затем записывается количество строк, а далее построчно сохраняются числовые элементы таблицы (тип данных, представляющий их, также должен быть оговорен). Число строк необходимо запомнить, чтобы знать, где остановиться при чтении информации. Теперь таблица может быть записана в файл в виде следующей последовательности:

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

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

ЗАГОЛОВОК (служебная инфомация) Собственно сохраняемые данные

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

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

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

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

Наши рекомендации