- •1.1. Цель работы.
- •1.2. Задание на подготовку к лабораторной работе.
- •1.3. Порядок выполнения работы.
- •1.4. Варианты заданий и условия задач.
- •1.5. Вопросы для самопроверки.
- •1.6. Методические указания.
- •1.6.1 Машинное представление целочисленных типов данных.
- •1.6.2 Машинное представление вещественных типов данных.
- •1.6.3 Машинное представление символьных типов данных.
- •1.6.4 Машинное представление логических (булевских) типов данных.
- •1.6.5 Машинное представление скалярных типов данных.
1.6.3 Машинное представление символьных типов данных.
Символьный тип или поддиапазон (отрезок) символьного типа (Char) хранится, как байт без знака. Множеством значений этого типа являются символы, упорядоченные в соответствии с расширенным набором символов кода ASCII. значением переменной этого типа может быть любой символ - это буквы, цифры, знаки препинания и специальные символы. Каждому символу алфавита соответствует индивидуальный числовой код от 0 до 255. При вызове функции Ord(Ch), где Ch - значение символьного типа, возвращается порядковый номер Ch. Обычно значения для переменных типа char задаются в апострофах:
ch:='*'; a:='8'; letter:='G'.
Наиболее распространенной международной согласованной системой кодирования всех символов является система ASCII (American Standard Code for Information Interchange - Американский стандарт кодов для обмена информацией). Строго говоря, Американский стандарт кодов регламентирует только символы с кодами от 0 до 127, которые представляют так называемую основную таблицу кодов ASCII. Эта часть идентична на всех IBM-совместимых компьютерах. В нее входят коды управляющих символов, коды символов цифр и знаков и коды символов букв латинского алфавита (прописных и строчных). Основная таблица кодов ASCII приведена в приложении 6.
Первые 32 символа ASCII являются управляющими. Для большинства из них не существует соответствующей клавиши. Для того, чтобы включить в последовательность символов такие символы, введено понятие управляющего символа, для которого предусмотрена запись: ^<символ>. Например, ^[ - соответствует клавише <Escape>; ^G - для подачи звукового сигнала и т. п.
Кроме того, для всех символьных переменных имеется возможность задавать значения указанием непосредственного числового значения ASCII-кода: kd:=#65 {задание символа 'A'(латинского ) }; s:=#10 {задание клавиши <Enter>} и т. п. (здесь указаны десятичные коды символов). Для ввода символов, отсутствующих на клавиатуре компьютера, в IBM PC-совместимых ПК в среде MS-DOS можно использовать клавишную команду <Alt>+<десятичный код символа, набранный на цифровой клавиатуре>.
Следует обратить внимание на то, что три символа основной таблицы кодов ASCII с десятичными кодами 0, 20, 127, а также символ с десятичным кодом 255 обычно "выглядят" одинаково - никак. Символ с #20 (пробел) является стандартным символом, и, при встрече его в тексте, устройства вывода информации (принтеры, мониторы и т. п.) оставляют пустое место. Остальные три символа являются действительно "пустыми", так как они обычно игнорируются устройствами вывода информации (встречая их, они не выполняют никаких действий). Символ с #0 (NULL) является управляющим символом, и обычно используется в качестве признака окончания, так называемых, "длинных" или ASCIIZ-строк. Символы с #127 и (обычно) #255 являются "пустыми" символами, которые применяются, главным образом, при передаче данных по линии связи для поддержки связи в момент отсутствия передачи реальных данных.
Коды с символами от 128 до 255 представляют национальную часть таблицы кодов ASCII и в нее входят символы национальных алфавитов (называемые иногда неанглийскими символами), псевдографики и некоторые научные символы (символы некоторых математических операций и обозначений, а также буквы греческого алфавита). Кодовые таблицы, включающие национальные части называются расширением ASCII.
За рубежом наибольшее распространение получила кодовая таблица фирмы IBM под названием MATHII (), содержащая символы греческого алфавита и символы некоторых западноевропейских языков, отсутствующие в стандартном латинском алфавите. у фирмы IBM есть и другие кодовые таблицы, но обычно, если название таблицы не упоминается, то подразумевается именно эта таблица.
Для поддержки символов кириллицы, в бывшем СССР и Болгарии были разработаны пять кодовых таблиц. Наибольшее распространение получила альтернативная кодовая таблица. В ней символы псевдографики расположены на тех же местах, где они расположены в кодовой таблице фирмы IBM. Символы кириллицы расположены на тех позициях, где в кодировке IBM расположены символы национальных алфавитов и греческие буквы. Некоторым недостатком такой таблицы является "разрыв" букв кириллицы в кодовой таблице. В частности, буквы А-Я имеют десятичные коды 128-159, затем следуют буквы а-п с кодами 160-175, затем "разрыв" на символы псевдографики и, наконец, буквы р-я имеют коды 224-239. Такая организация таблицы несколько затрудняла обработку текстовой информации, но зато обеспечивала совместимость с зарубежными программами, выводящими на экран или принтер символы псевдографики. Альтернативная кодовая таблица также приведена в приложении 6. Иногда встречается модифицированная альтернативная кодовая таблица, отличающаяся от альтернативной только тем, что в ней символы с кодами 240-255 совпадают с соответствующими символами кодовой таблицы фирмы IBM.
Еще два варианта кодовых таблиц - основная (или ГОСТ'овская) кодовая таблица ISO-8859-5 и кодовая таблица MIC (Болгария), содержащие символы кириллицы, обеспечивали "непрерывность" букв кириллицы в кодовой таблице, но достигалось это за счет частичного или полного перекрытия символов псевдографики. Это с одной стороны, облегчало обработку текстовой информации, но, с другой стороны, делало чрезвычайно неудобной использование программ, работающих с псевдографикой. Поэтому они не получили широкого распространения.
Кодовая таблица КОИ-8 (KOI8-R) была разработана еще в эпоху больших ЭВМ (ныне называемых мэйнфреймами) и регламентируется ГОСТ 19768-74. Она получила широкое распространение в Unix-системах. Так как системы на основе Unix были в основном рассчитаны на работу с электронной почтой и международными сетями, то она стала стандартом как для этой системы, так и систем электронной почты. Для того, чтобы облегчить переписку между пользователями разных типов компьютеров и операционных систем, КОИ-8 была принята как универсальная кодировка, и любая почтовая программа была обязана уметь читать и отправлять сообщения в этой кодировке. Поэтому, любой пользователь персонального компьютера под управлением MS-DOS или Windows, имеющий выход к электронной почте, должен иметь у себя программу для получения и отправки сообщений, умеющую работать с КОИ-8. Эта кодовая таблица имеет те же недостатки, что и основная кодовая таблица, которая, по сути, представляет модификацию КОИ-8 для персональных компьютеров.
Таким образом, при использовании разных кодовых таблиц, одному и тому же коду символа, находящемуся в национальной части таблицы кодов ASCII, в зависимости от используемой кодовой таблицы, будут соответствовать разные символы. С развитием компьютерной индустрии и выходом программных продуктов за пределы одной страны (США) возникла необходимость разобраться в путанице представления символов. Толчком к этому стало также бурное развитие Internet. Предлагались многочисленные варианты решения данной проблемы.
С появлением операционной системы Windows 3.х, стало возможным загружать необходимые кодовые таблицы (их стало много и они получили соответствующие номера) при запуске системы (команда Country в файле CONFIG.SYS). Стандартная DOS'овская кодировка для кириллицы в Windows находится на кодовой странице (таблице) с названием (номером) CP 866. Однако, неудобство заключалось в том, что для одновременного использования русских и, скажем, специфических немецких или французских символов применялись два различных шрифта - один для кириллицы, другой - для немецких (французских). Зачастую они разрабатывались разными производителями и немного отличались начертанием.
В последнее время получил массовое признание стандарт Unicode. Он оговаривает кодирование символов не одним байтом (256 символов), а двумя, что дает возможность представить одновременно до 65536 различных знаков. Кроме того, стандарт оговаривает строгое расположение символов, использующихся в разных странах мира, в таблице кодировки. Первые 128, как и следовало ожидать, остались такими же, как и в ASCII, - цифры, знаки препинания, буквы латинского алфавита. Для русских букв выделен диапазон кодов от 1025 до 1112. Есть место и для греческих, арабских, тибетских знаков. Стандарт Unicode был поддержан Microsoft при выпуске Windows 95. Ее "родные" шрифты Arial, Courier New, Times New Roman содержат уже не 256 символов, как это было раньше, а около 700. Конечно, не все символы из Unicode реализованы в этих шрифтах (да и нужно ли это?). В панъевропейской и русской версиях они содержат символы европейских стран (включая кириллицу), зато в китайской присутствуют азиатские и некоторые другие буквы. Однако старые программы не умеют работать с символами, основанными на двухбайтном кодировании. Чтобы избежать трудностей, вызванных этим, были введены в систему "виртуальные" шрифты, типа Arial СЕ, Arial Cyr, Arial Greek и т. д. На самом деле их, как таковых, не существует, - они берутся из одного и того же Arial, а в файле WIN.INI указывается соответствующий номер кодовой таблицы (для русского языка - это номер 204 для обычно использующейся кодировки Windows CP 1251).
Так как символы языка упорядочены, то к символьным данным применимы операции сравнения. Операция сравнения осуществляется следующим образом: из двух символов меньше тот, который встречается в таблице ASCII раньше. Так как символьный тип является порядковым типом данных, то для него справедливо все, что было сказано выше о других порядковых типах.
Строковая константа с длиной 1 может обозначать значение константы символьного типа. Любое значение символьного типа может быть получено с помощью стандартной функции Chr.
