Файл: Операции, производимые с данными (Основное понятие).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 11.03.2024

Просмотров: 12

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Рисунок 3 - Примеры различных систем кодирования

Одним битом способны быть выражены два понятия: 0 или 1 (да или нет, черное или белое, истина или ложь и пр.). В том случае, если количество битов увеличить до двух, то уже можно выразить четыре различных понятия:

00 01 10 11 данные обработка носитель кодирование

Тремя битами можно закодировать 8 различных значений: 000 001 010 011 100 101 ПО 111

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

N=

где N— количество независимых кодируемых значений;

m — разрядность двоичного кодирования, принятая в установленной системе.

2.2 Кодирование целых и действительных чисел

Целые числа кодируются двоичным кодом несложно — необходимо взять целое число и делить его надвое до тех пор, пока частное не будет равно единице [12]. Совокупность остатков от каждого деления, записанная справа налево вместе с последним частным, и образует двоичный аналог десятичного числа.

19:2 = 9 + 1

9:2=4+1

4:2 = 2 +-0

2:2=1+0

Следовательно, 1910= 100112.

Для кодирования целых чисел от 0 до 255 нужно иметь 8 разрядов двоичного кода (8 бит). Шестнадцать бит дают возможность закодировать целые числа от 0 до 65 535, а 24 бита — уже более 16,5 млн различных значений.

Для кодирования действительных чисел применяют 80-разрядное кодирование. В данном случае число предварительно преобразуется в нормализованную форму:

3,1415926 = 0,31415926 • 101 300 000 = 0,3 • 106

123 456 789 - 0,123456789 • 1010

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

2.3 Кодирование текстовых данных

Если каждому символу алфавита сопоставить некоторое целое число (например, порядковый номер), то благодаря двоичному коду можно кодировать и текстовую информацию [14]. Восьми двоичных разрядов хватит для кодирования 256 разных символов. Этого достаточно, чтобы выразить различными комбинациями восьми битов все символы английского и русского языков, как строчные, так и прописные, а также знаки препинания, символы основных арифметических действий и определенные общепринятые специальные символы, например, символ «§».


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

Для английского языка противоречий нет. Институт стандартизации США (ANSI — American National Standard Institute) ввел в действие систему кодирования ASCII (American Standard Code for Information Interchange — стандартный код информационного обмена США) [10]. В данной системе существуют две таблицы кодирования — базовая и расширенная. Базовая таблица фиксируют значения кодов от 0 до 127, а расширенная от 128 до 255.

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

Начиная с кода 32 по код 127 размещены коды символов английского алфавита, знаков препинания, цифр, арифметических действий и определенных вспомогательных символов [5]. Базовая таблица кодировки ASCII показана на рисунке 4. Подобные системы кодирования текстовых данных были созданы и в других странах. Поддержка производителей оборудования и программ вывела американский код ASCII на уровень международного стандарта, и национальные системы кодирования вынуждены были отойти во вторую, расширенную часть системы кодирования, устанавливающую значения кодов со 128 по 255 [12]. Отсутствие единого стандарта в данной области привело к множественности одновременно действующих кодировок. Только в России можно указать три действующих стандарта кодировки и еще два устаревших.

Рисунок 4 - Кодировка ASCII

Так, например, кодировка символов русского языка, известная как кодировка Windows-1251, была интегрирована «извне» — компанией Microsoft, но, принимая во внимание широкое распространение операционных систем и иных продуктов данной компании в России, она глубоко закрепилась и нашла широкое распространение (рисунок 5). Такая кодировка применяется на большинстве локальных компьютеров, функционирующих на платформе Windows [11].


Рисунок 5 – Кодировка Windows 1251

Другая распространенная кодировка называется КОИ-8 (код обмена информацией, восьмизначный) — ее происхождение относится ко временам действия Совета Экономической Взаимопомощи государств Восточной Европы (рисунок 6) [1]. В настоящее время данная кодировка интенсивно применяется в компьютерных сетях на территории России и в российском секторе Интернет.

Международный стандарт, в котором есть кодировка символов русского алфавита, носит название кодировки /50 (International Standard Organization — Международный институт стандартизации) [4]. На практике такая кодировка применяется нечасто (рисунок 7).

Рисунок 6 –Кодировка КОИ-8

Рисунок 7 –Кодировка ISO

Рисунок 8 – ГОСТ-альтернативная кодировка

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

Ввиду большого количества систем кодирования текстовых данных, функционирующих в России, появляется задача межсистемного преобразования данных — это одна из ключевых задач информатики [1].

2.4 Универсальная система кодирования текстовых данных

Если провести анализ организационных сложностей, связанных с созданием единой системы кодирования текстовых данных, то можно сделать вывод о том, что они вызваны ограниченным набором кодов (256). Вместе с тем очевидно, что если, к примеру, кодировать символы не восьмиразрядными двоичными числами, а числами с большим количеством разрядов, то и диапазон вероятных значений кодов будет существенно больше. Данная система, базирующаяся на 16-разрядном кодировании символов, получила название универсальной — UNICODE [9]. Unicode — стандарт кодирования символов, дающий возможность представить знаки почти всех письменных языков. Юникод имеет несколько форм представления: UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но ввиду несовместимости с ASCII она не получила распространения и не включена в стандарт. В Microsoft чаще всего применяется форма UTF-16LE. В UNIX-подобных операционных системах GNU/Linux, BSD и Mac OS X установлена форма UTF-8 для файлов и UTF-32 или UTF-8 для обработки символов в оперативной памяти.


Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода» (англ. Unicode Consortium), объединяющей мощнейшие IT-корпорации. Использование данного стандарта дает возможность закодировать множество символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита и кириллицы, при этом становятся ненужными кодовые страницы [8].

По мере изменения и пополнения таблицы символов системы Юникода и выхода новых версий этой системы, — а эта работа осуществляется непрерывно, т.к. изначально система Юникод включала только Plane 0 — двухбайтные коды, — выходят и новые документы ISO. Система Юникод существует в общей сложности в следующих версиях:

- 1.1 (соответствует стандарту ISO/IEC 10646—1:1993),

- 2.0, 2.1 (тот же стандарт ISO/IEC 10646—1:1993 плюс дополнения: «Amendments» с 1-го по 7-е и «Technical Corrigenda» 1 и 2),

- 3.0 (стандарт ISO/IEC 10646—1:2000).

- 3.2 (стандарт 2002 года)

- 4.0 (стандарт 2003)

- 4.01 (стандарт 2004)

- 4.1 (стандарт 2005)

-5.0 (стандарт 2006) и т.д.

Хотя формы записи UTF-8 и UTF-32 дают возможность кодировать до 231 (2 147 483 648) кодовых позиций, было принято решение применять только 220+216 (1 114 112) для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно — в настоящее время применяется немногим больше 99 000 кодовых позиций [3].

Кодовое пространство разделено на 17 плоскостей по 216 (65536) символов [6]. Нулевая плоскость называется базовой, в ней находятся символы наиболее употребительных письменностей. Первая плоскость применяется чаще всего для исторических письменностей. Плоскости 16 и 17 выделены для частного использования.

Для обозначения символов Unicode применяется запись вида «U+xxxx» (для кодов 0…FFFF) или «U+xxxxx» (для кодов 10000…FFFFF) или «U+xxxxxx» (для кодов 100000…10FFFF), где xxx — шестнадцатеричные цифры. Так, символ «я» (U+044F) имеет код 044F16 = 110310.

Универсальная система кодирования (Юникод) представляет собой набор графических символов и способ их кодирования для компьютерной обработки текстовых данных.

Графические символы — это символы, имеющие видимое изображение. Графическим символам противопоставляются управляющие символы и символы форматирования.

Графические символы содержат такие группы, как:

- буквы, имеющиеся хотя бы в одном из обслуживаемых алфавитов;

- цифры;

- знаки пунктуации;

- специальные знаки (математические, технические, идеограммы и т.д.);

- разделители [11].

Юникод — это система для линейного представления текста. Символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character) [7].


Графические символы в Юникоде подразделяются на протяжённые и непротяжённые (бесширинные). Непротяжённые символы при отображении не занимают места в строке. К ним относятся, в частности, знаки ударения и прочие диакритические знаки. Как протяжённые, так и непротяжённые символы имеют собственные коды. Протяжённые символы иначе называются базовыми (base characters), а непротяжённые - модифицирующими (combining characters); причём последние не могут встречаться самостоятельно. Например, символ «á» может быть представлен как последовательность базового символа «a» (U+0061) и модифицирующего символа «?» (U+0301) или как монолитный символ «á» (U+00C1).

Особый тип модифицирующих символов — селекторы варианта начертания (variation selectors) [6]. Они действуют только на те символы, для которых такие варианты определены. В версии 5.0 варианты начертания определены для ряда математических символов, для символов традиционного монгольского алфавита и для символов письма Phags-Pa.

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

В стандарте Юникода определены 4 формы нормализации текста:

  1. Форма нормализации D (NFD) — каноническая декомпозиция. В процессе приведения текста в эту форму все составные символы рекурсивно заменяются на несколько составных, в соответствии с таблицами декомпозиции.
  2. Форма нормализации C (NFC) — каноническая декомпозиция с последующей канонической композицией. Сначала текст приводится к форме D, после чего выполняется каноническая композиция — текст обрабатывается от начала к концу и выполняются следующие правила:

Символ S является начальным, если он имеет нулевой класс модификации в базе символов Юникода.

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

Первичным композитом считается символ, у которого есть каноническая декомпозиция в базе символов Юникода [2].

Символ X может быть первично совмещен с символом Y если и только если существует первичный композит Z, канонически эквивалентный последовательности <X, Y>.

Если очередной символ C не блокируется последним встреченным начальным базовым символом L, и он может быть успешно первично совмещен с ним, то L заменяется на композит L-C, а C удаляется.