Лекции: лекции (2009)
Описание
Характеристики лекций
Список файлов
- Прочти меня!!!.txt 136 b
- лекции (2009).txt 249,06 Kb
Файл скачан с сайта StudIzba.com
При копировании или цитировании материалов на других сайтах обязательно используйте ссылку на источник
Сейчас идет возврат к обобщенным типам данных.
Родина большинство языков программирования – Америка и Европа, алфавиты которых не особо
отличаются друг от друга и состоят из не очень большего количества различных букв. Поэтому вполне
хватало 1 байта(256 различных символов) для кодирования любого символа. Но со временем стало понятно,
что 1 байтом не обойтись( например, в программах где приходилось реализовать многоязычность). Поэтому
люди стали думать о новых символьных типах данных. И происходило это в 80 – ые годы. Первым путем
решения этой проблемы стало введение различных кодировок, как например ASCII-7, которая жива и ныне(
первые 128 служебные, потом идут большие и малые английские буквы, цифры, знаки пунктуации…). Многие
кодировки содержат первые 128 символов, такие же как в ASCII-7, и что – то свое. Проблемы осложнились
когда дело дошло до Китая и Японии(появилось еще множество новых кодировок…) Чтобы хоть как – то
уладить проблемы с большим количеством различных кодировок в 91 году появляется стандарт Unicode. На
нем остановимся чуть поподробнее. Юникод, или Уникод (англ. Unicode) — стандарт кодирования символов,
позволяющий представить знаки практически всех письменных языков.
Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода» (англ. Unicode
Consortium, Unicode Inc.). Применение этого стандарта позволяет закодировать очень большое число
символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы,
математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становятся
ненужными кодовые страницы. Рассмотрим наиболее популярный формат UTF-8.
UTF-8 (от англ. Unicode Transformation Format — формат преобразования Юникода) — в настоящее время
распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием
текста. Нашла широкое применение в операционных системах и веб-пространстве Unicode и его роль в веб-
пространстве.
Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный
текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с
тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов
(реально только до 4 байтов, поскольку использование кодов больше 221 не планируется), в которых первый
байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.
Проще говоря, в формате UTF-8 символы латинского алфавита, знаки препинания и управляющие символы
ASCII записываются кодами US-ASCII, a все остальные символы кодируются при помощи нескольких октетов
со старшим битом 1. Это приводит к двум эффектам.
• пДраежпеи енсалнии яп рбоугдруат момтао бнре аржаастпьосзян апёрта вЮилньинкоо. д, то латинские буквы, арабские цифры и знаки
• В случае, если латинские буквы и простейшие знаки препинания (включая пробел) занимают
существенный объём текста, UTF-8 даёт выигрыш по объёму по сравнению с UTF-16.[1][2]
• На первый взгляд может показаться, что UTF-16 удобнее, так как в ней большинство символов
кодируется ровно двумя байтами. Однако это сводится на нет необходимостью поддержки
суррогатных пар, о которых часто забывают при использовании UTF-16, реализовывая лишь
поддержку символов UCS-2.[1].
Символы UTF-8 получаются из Unicode следующим образом:
Unicode UTF-8
0x00000000 — 0x0000007F 0xxxxxxx
0x00000080 — 0x000007FF 110xxxxx 10xxxxxx
0x00000800 — 0x0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 — 0x001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Также теоретически возможны, но не включены в стандарты:
Unicode UTF-8
0x00200000 — 0x03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 — 0x7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Замечание: Символы, закодированные в UTF-8, могут быть длиной до шести байт, однако стандарт Unicode не
определяет символов выше 0x10ffff, поэтому символы Unicode могут иметь максимальный размер в 4 байта в
UTF-8.
Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого
документа, сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM),
также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). Чтобы при сохранении
избавиться от добавления сигнатуры, используйте, например, Notepad++.
Лекция. Лихогруд Н.Н.
п.2.4 Ограниченные типы данных
п.2.4.1 Перечисления (перечислимые типы данных)
Паскаль:
Type EnumTyp = (va1, …, valN);
Операции:
:=, =, <, >, <>, >=, <= - основаны на функциях succ(x), pred(x)
ord(x) = 0…N-1 (Элементы упорядочены)
Таким образом перечислимый тип – некий способ удобного создания, хранения и использования констант.
Для UNICOD FFFE – «магическая константа», определяет порядок байтов
Совет по программированию – Использование констант делает программу более понятной. В программе не
именованными должны быть только 0,1,-1. Все остальные константы нужно именовать.
т.е. I := 54; - плохой стиль
преобразования:
EnumType -> Integer безопасно
Integer -> EnumType Небезопасно. Нужны проверки
Статические проверки – проверки при компиляции программы. Проверяемые данные не меняются в
различных вызовах функции (запусках программы)
A:array [1..100] of integer;
……….
a[10] = 10; Статическая проверка
Квазистатические проверки - проверки при выполнении. Квазистатическим они называются потому, что
проверяемые данные могут меняться в различных вызовах
функции (запусках программы). Поэтому эти проверки делаются именно при выполнении.
Компилятор обнаруживает опасное место в программе и вставляет в это место квазистатический код, который
выполнится в процессе работы программы.
a:array [1..100] of integer;
……….
a[n] = 10; n не известна в момент компиляции. Если язык поддерживает
квазистатические проверки, то здесь будет вставлен контроль выхода за границу массива
x:0…N-1
x:= expr; Вставится роверка вида «if(expr >= N) or (expr <0) then error()», т.к.
значение expr не известно во время компиляции
В машинных языках нет квазистатических проверок. Поэтому нет и в Си
int a[10];
n = 11;
a[n] = 10; В Си проверки не будет
RTTI – динамическая информация о типе. Ради этого в Си++ вставлены квазистатические проверки.
В Си-89 добавили такую конструкцию:
enum ET(v0,…,vN);
которая эквивалентна последовательности строк
#define v0 0;
#define v1 1;
……..
Но так как нет квазистатических проверок, то все нижеследующие строки будут корректны:
enum ET y;
int I;
x = v1;
I = v2;
x = I;
I = x;
x = -5;
Негласная парадигма языка Си – «компактность кода», а квазистатические проверки, естественно,
увеличивают генерируемый код.
В своё время перечислимые типы были очень популярны.
Но:
• Языки «Оберон»(1988) и «Оберон-2»(1993) уже не содержали перечислимые типы. В Обероне было
«Расширение типов», которому противоречат перечислимые типы данных, которые невозможно
расширить.
• uses (pascal, Ада) Вместе с перечислимым типом неявно импортируются все его константы на том же
уровне видимости .Таким образом значения констант могут конфликтовать и перекрываться для
разных перечислимых типов (в т.ч. из разных модулей)
• Java (1995) – нет перечислимых типов
• C# (1999) – перечислимые типы есть. Одно из назначений - хранение наборов значений параметров
компонентов( например влево/вправо/по центру для выравнивания). Т.е. перечислимые типы
интегрировали в визуальные средства проектирования.
Начать зарабатывать