229
ПРЕДСТАВЛЕНИЕ ДАННЫХ В (ПАМЯТИ) КОМПЬЮТЕРА
Представление данных в компьютере сводится по сути к различным способам их кодирования в двоичном алфавите. А само существование различных способов обуславливается тем, что обработка данных разного типа включает в себя различные операции, и целесообразно выбирать такой способ кодирования, при котором операции над данными выполняются наиболее быстро и “универсально”.
Как Вы уже знаете, компьютер может обрабатывать данные текстового (символьного), числового, графического и звукового вида. Причем, если звук и графика относятся к данным непрерывного типа, то числа и текст - к данным дискретного типа.
ВОПРОСЫ
ЭВМ бывают двух типов - аналоговые (АВМ) и цифровые (ЦВМ). В настоящее время наибольшее распространение получили ЦВМ. Их основное отличие в том, что сигналы хранятся и передаются в дискретном виде - побитно. Каждый бит может принимать только два различаемых устройствами компьютера значения, которые принято обозначать 0 и 1.
1). Как Вы думаете, какого типа сигналы - непрерывные или дискретные - проще закодировать, используя два дискретных значения?
2). Можно ли непосредственно (без использования каких-либо предварительных преобразований) закодировать данные непрерывного типа с помощью дискретных значений?

Рис. Формы представления информации
ПРЕДСТАВЛЕНИЕ ТЕКСТОВОЙ ИНФОРМАЦИИ
ПОНЯТЬ
Под текстом понимается последовательность знаков, входящих в некоторое множество (алфавит) и обладающих в этом множестве определенным смыслом. То есть каждый знак рассматривается в таком контексте как символ. Поэтому часто данные такого вида называют еще символьными. В более узком смысле текстом будем называть некоторую последовательность закодированных в двоичном коде знаков, которую можно хранить, передавать, преобразовывать с помощью компьютера.
Если первоначально компьютеры были предназначены для проведения всевозможных расчетов (“вычислительные машины”), то есть выполнения операций над числами, то в настоящее время значительная доля компьютерных ресурсов тратится именно на ввод, хранение, передачу и обработку текстов.
Какие же операции можно производить над символами текста, если он уже находится в памяти компьютера? Прежде всего, поиск заданной последовательности символов и замена на другую последовательность символов, а также их упорядочивание (Заметим, что добавление, замена, удаление, копирование и тому подобные операции относятся в равной мере к обработке данных всех типов). И поиск, и упорядочивание сводятся к выполнению операции сравнения символов. При сравнении символов наиболее важными аспектами являются уникальность кода для каждого символа и длина этого кода, а сам выбор принципа кодирования в настоящее время практически не имеет значения. Поэтому можно использовать различные таблицы перекодировки, лишь бы при кодировании и декодировании символов использовалась одна и та же таблица.
Таблица перекодировки - таблица в соответствии с которой производится преобразование символов в их двоичный код и обратно.
Наиболее популярные таблицы перекодировки: ДКОИ-8, ASCII, CP1251, Unicode.
Что касается длины кода, то она по возможности должна быть минимальной и в то же время достаточной для кодирования всех символов, которые могут потребоваться при вводе текстов любой сложности. Как правило, все допустимые символы представлены на клавиатуре. Вы можете пересчитать их количество, учитывая, что одна и та же клавиша может передавать до 4-х символов (конечно, при использовании сочетания из двух-трех клавиш), а один и тот же символ иногда можно вводить с помощью разных клавиш.
Стандартно на клавиатуре, предназначенной для российского пользователя, представлены:
66 букв русского алфавита: 33 прописных и 33 строчных;
52 буквы латинского алфавита: 26 прописных и 26 строчных;
10 цифр;
8 знаков препинания . , “ : ; ! ? ‘
9 - скобки и разделители ( ) { }[ ] \ | _
4 - знаки арифметических операций + - * /
3 - знаки операций отношения =
7 - специальные знаки @ # $ % ^ & ~
Это уже 159 знаков. Но свой код имеют и управляющие клавиши: ввод, регистр, вставка, удаление, клавиши управления курсором, прерывание, функциональные клавиши.
Минимальная длина двоичного кода для данного набора знаков - 8 (так как 27 = 128, а 28 = 256). Исторически сложилось, что эта длина кода была выбрана для такой единицы измерения информации в компьютере, как байт (1 байт = 8 бит). Именно поэтому при измерении информации с точки зрения технического подхода мы говорим: “один символ - один байт”.
Заметим, что эта длина кода отражена, например, в названии таблицы перекодировки КОИ8 - код обмена информацией длиной 8 бит. Этот код был хронологически одним из первых стандартов кодирования русских букв еще на компьютерах серии ЕС ЭВМ. Его отличительной особенностью является то, что буквы русского (кириллического) алфавита расположены в таблице не в алфавитном порядке.
Поскольку различных комбинаций из 0 и 1 при длине кода 8 бит будет 28 = 256 с помощью одной таблицы перекодировки можно закодировать не более 256 символов.
ВОПРОС. Почему мы считаем, что “как правило все необходимые символы представлены на клавиатуре”? Какие в этом правиле Вы знаете исключения?
Чтобы ответить на этот вопрос, подумайте о том, что:
еще до появления графического пользовательского интерфейса даже простые текстовые редакторы позволяли создавать таблицы, среды программирования также предоставляли программисту возможность создать несложные рисунки. схемы. Для этого использовалась так называемая псевдографика. Отдельные графические примитивы можно ввести с использованием клавиши или ей подобной;
в алфавитах разных языков встречаются буквы, отличающиеся по написанию от букв латинского алфавита, например, использование “точек” над буквами в немецком языке, китайские иероглифы, специальные математические символы в языке математики и т.п. Вероятнее всего, существуют специальные программные средства или специальные возможности в используемых вами программных средствах, которые бы позволяли составлять тексты на этих языках.
ЭВМ первых поколений в силу ограниченности оперативной памяти и невысокого по современным меркам быстродействия процессоров использовали минимальный набор символов. Рост мощности компьютерных устройств привел к тому, что в настоящее время при работе с одним ПК можно использовать несколько разных таблиц перекодировки. По сути, многие современные программные средства, будь то текстовые процессоры или программы для работы в Internet, предоставляют пользователю возможность выбора, какую из таблиц перекодировки использовать в своей работе, автоматически проводя преобразования существующего текстового файла из одного способа кодирования в другой по команде пользователя.
Сейчас, когда объем памяти компьютеров чрезвычайно вырос, уже нет нужды очень сильно экономить при кодировании текста. Можно позволить себе "роскошь" тратить для хранения текста вдвое больше памяти (выделяя для каждого символа не 1, а 2 байта). При этом появляется возможность разместить в кодовой таблице - каждый на своем месте - не только буквы европейских алфавитов (латинского, кириллического, греческого), но и буквы арабского, грузинского и многих других языков и даже большую часть японских и китайских иероглифов. Ведь два байта могут хранить уже число от 0 до 65535.
Двухбайтная международная кодировка Unicode, разработанная несколько лет назад, теперь начинает внедряться на практике. Полная спецификация стандарта Unicode представляет собой довольно толстую книгу и включает в себя все существующие, вымершие и искусственно созданные алфавиты мира, а также множество математических, музыкальных, химических и прочих символов.
ЗНАТЬ
Текстом будем называть некоторую последовательность закодированных в двоичном коде знаков, которую можно хранить, передавать, преобразовывать с помощью компьютера.
Основные процедуры, производимые над текстами:
общие (выполняемые не только над текстами, но и над информацией, представленной в других видах) - добавление, замена, удаление, копирование элементов;
специальные (в наибольшей степени производимые над данными текстового вида) - поиск и упорядочивание.
Основная операция, производимая над отдельными символами текста - сравнение символов.
При сравнении символов наиболее важными аспектами являются уникальность кода для каждого символа и длина этого кода, а сам выбор принципа кодирования практически не имеет значения.
Исторически сложилось, что в качестве длины кода для кодирования символов было выбрано 8 бит или 1 байт (1 байт = 8 бит). Поэтому чаще всего одному символу текста, хранимому в компьютере, соответствует один байт памяти.
Для кодирования текстов используются различные таблицы перекодировки. Важно, чтобы при кодировании и декодировании одного и того же текста использовалась одна и та же таблица.
Таблица перекодировки - таблица, содержащая упорядоченный некоторым образом перечень кодируемых символов, в соответствии с которой происходит преобразование символа в его двоичный код и обратно.
Различных комбинаций из 0 и 1 при длине кода 8 бит может быть 28 = 256, поэтому с помощью одной таблицы перекодировки можно закодировать не более 256 символов. При длине кода в 2 байта (16 бит) можно закодировать 65536 символов.
УМЕТЬ
ВОПРОС 1
Могут ли разные программные средства, установленные на одном и том же компьютере использовать разные таблицы перекодировки символов?
ЗАДАНИЕ 1
Рассмотрите клавиатуру вашего компьютера. Сколько различных символов вы можете использовать в своих текстах?
ЗАДАНИЕ 2
В приложении ??? приведены наиболее популярные таблицы кодировки символов. Используется ли какая-нибудь из них на вашем компьютере? Если нет, то выявите различия и попробуйте объяснить, чем они вызваны. Определите, есть ли в вашей таблице кодировки символы, которые не представлены в явном виде на клавиатуре.
ЗАДАНИЕ 3
Определите, есть ли в вашем распоряжении средства, позволяющие вставлять в текст символы, не представленные на клавиатуре, например, элементы псевдографики ( ) или математические знаки ( ).
Ответьте на вопросы:
Эти средства “заложены” в возможности и предоставляются вам аппаратными или программными средствами компьютера?
Какие, на ваш взгляд, программные средства - операционная система, текстовый редактор, среда программирования - могут обеспечивать возможность пользователю использовать разные таблицы перекодировки?
Есть ли какая-нибудь связь между форматом текстового файла и используемой при его создании таблицей перекодировки?
ЗАДАНИЕ 4
Изучите возможности текстового редактора, установленного на вашем компьютере, по использованию различных таблиц перекодировки символов и по вставке в текст специальных знаков, не представленных на клавиатуре.
ЗАДАНИЕ 5
Как правило, языки программирования высокого уровня предоставляют пользователю возможность использовать псевдографические символы для “оформления” вывода информации на экран. С помощью документации к соответствующей среде программирования или используя встроенную помощь, определите, какие дополнительные символы, не представленные на клавиатуре, и каким образом вы можете использовать при программировании.
ЗАДАНИЕ 6
Как правило, в программных средствах, предназначенных для работы с файлами (часто они называются еще операционными оболочками), предусмотрена возможность просмотра файлов (например, в таких оболочках, как Norton Commander, FAR-manadger и т.п. для этого служит функциональная клавиша F3). Попробуйте “просмотреть” таким образом файлы разного формата - текстовые, графические, базы данных и пр. Всегда ли на экране появляется “осмысляемое” изображение? Почему очень часто изображение на экране представляет собой набор непонятных символов и значительно отличается от того, что бы вы увидели, если бы тот же самый файл просмотрели в том программном средстве, где он создан, например, базу данных в СУБД или рисунок в графическом редакторе?
РАСШИРЬ СВОЙ КРУГОЗОР
В качестве примеров наиболее популярных таблиц кодировки символов мы приводили ДКОИ-8, ASCII, СР1251. Конечно же, это не просто набор символов, а сокращение от слов - названий таблиц.
Например, название ДКОИ-8 образуется от слов “двоичный код обмена информацией с постоянной длиной кода 8 бит”, ASCII - “american standard code for information interchange” - американский стандартный код для обмена информацией, СР1251 - “Code Page” - кодовая страница.
Для каждого кода устанавливаются свои правила кодирования.
Например, в ДКОИ-8, который использовался еще на больших ЭВМ, байт разбивается на две зоны (рис. ...). В старшей зоне формируются признаки символа и группы (таблица ...), в младшей - порядковый номер в группе.

Признак символа | Пример признака группы (для признака символа 11) |
код | название | код | название |
11 10 01 00 | Прописные буквы и цифры Строчные буквы Специальные символы Прочая информация | 00 01 10 11 | A . . . I J . . . R S . . . Z 0 . . . 9 |
Например, приведенным ниже символам соответствуют следующие коды в таблице ДКОИ-8:
A - 11 00 0001 | a - 10 00 0001 | + - 01 00 1110 |
J - 11 01 0001 | 7 - 11 11 0111 | : - 01 11 1010 |
ИНТЕРЕСНЫЙ ФАКТ
Зачем вообще понадобилось создавать разные кодировки для одного и того же алфавита? Разве трудно было придерживаться какого-то одного для всех стандарта? Помимо соображений конкуренции ("Когда наша операционная система завоюет признание, то вместе с ней утвердится и кодировка, - так что конкурентам придется поработать, обеспечивая совместимость") изобретателями кодировок в первую очередь двигал чисто практический расчет. Как правило, еще до того как операционная система русифицируется, за символами из верхней половины таблицы ASCII (с кодами от 128 до 255) уже закреплено то или иное употребление, и чтобы разместить в этом же диапазоне кириллический алфавит, приходится чем-то жертвовать. Разумеется, наименее ценные кодовые позиции, замещение которых нанесет наименьший ущерб функциональности системы, в каждом случае свои, и чаще всего необходимые для полного набора кириллицы 66 знакомест (включая букву "ё", которая традиционно выносится за пределы основного алфавита) не удается расположить подряд. Этим и объясняется тот факт, что ни в одной из кодировок, кроме ISO 8859-5 и Unicode, русские буквы не идут сплошным блоком. В некоторых кодировках допускаются даже отклонения от алфавитного порядка - в особенности в КОИ8, расположение русских букв в которой определяется, как это ни смешно, алфавитом тех латинских букв, которые на клавиатурах советского производства располагались на одних клавишах с соответствующими буквами кириллицы (например, буква "Ю" стояла на одной клавише с символом "@", идущим в ASCII перед латинской "A", и потому стала в КОИ8 "первой буквой алфавита").
Интернет немыслим без интенсивного обмена информацией между разными компьютерами - и в том числе (и даже в первую очередь) информацией текстовой. Поэтому проблема кодировок приобрела в последнее время особую остроту. Идеальным был бы вариант, при котором вся информация проходила бы по сети в одной стандартной сетевой кодировке, а на входе и выходе каждого компьютера, включенного в сеть, стояли бы перекодировщики, незаметно для пользователя преобразующие поток данных из сетевой кодировки в локальную кодировку данного компьютера (которая при этом может быть какой угодно) и обратно.
До некоторой степени этот идеал до недавнего времени был реализован только в системах электронной почты и телеконференций русскоязычного Интернета, где действительно существует стандартная сетевая кодировка КОИ8 и где программы-клиенты, отправляющие и получающие почту, перекодируют ее перед отправкой и после приема.
Однако в последнее время на сцену выходит множество новых почтовых программ, нередко нерусифицированных. В большинстве случаев этот недостаток почтовых программ можно восполнить, установив на компьютер клавиатурный драйвер и шрифты в кодировке КОИ8.