Файл: Методы кодирования данных (Методы кодирования текстовой и числовой информации).pdf
Добавлен: 30.03.2023
Просмотров: 324
Скачиваний: 1
СОДЕРЖАНИЕ
ГЛАВА 2. Методы кодирования текстовой и числовой информации
2.1 Кодирование целых и действительных чисел
2.1.1 Двоично-десятичное кодирование
2.1.2 Представление целых чисел в дополнительном коде
2.2 Кодирование текстовой информации
ГЛАВА 3. Методы кодирования графической, аудио и видео информации
3.1 Кодирование графической информации
3.1.2 Векторное и фрактальное изображения
3.2 Кодирование аудио информации
3.2.1 Кодирование оцифрованного звука
Для представления информации в памяти ЭВМ (как числовой, так и не числовой) используется двоичный способ кодирования. Элементарная ячейка памяти процессора имеет длину 8 бит или 1байт. Каждый байт имеет свой порядковый номер, который называют его адресом. Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом. Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32, 64 битам. Для графических карт возможны длины слов 256 и 512 бит, что ускоряет работу процессора при вычислениях.
2.1.1 Двоично-десятичное кодирование
В некоторых ситуациях при представлении чисел в памяти ЭВМ используется комбинированная двоично-десятичная "система счисления", в которой для обработки каждого десятичного знака нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными представлениями чисел от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18-ю значащими цифрами и занимающий в памяти байт (старший из которых знаковый), использует именно этот вариант.
2.1.2 Представление целых чисел в дополнительном коде
Иным методом представления целых чисел в ЭВМ является дополнительный код. Спектр значений величин зависит от количества бит (байт) памяти, которые отведены для работы с ними. К примеру, величины типа short лежат в диапазоне от -32768 (−) до 32767 ( − 1) и для их хранения отводится 2 байта (16 бит); типа int — в диапазоне от − до − 1 и помещаются в 4 байтах (32 бита); типа char —в диапазоне от 0 до 65535 (используют 2 байта – 16 бит) и т.д.
Как было показано в примерах, существуют типы чисел как со знаком так и без него (signed, unsigned). В случае представления величины со знаком самый высокий (старший) разряд показывает на неотрицательное число, если содержит нуль, и на отрицательное, если — единицу. Вообще, разряды нумеруются справа налево, начиная с 0. Ниже показана нумерация бит в двухбайтовом машинном слове.
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Дополнительный код положительных чисел совпадает с их прямым кодом. Прямой код целого числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем к его двоичное представление слева приписывают такое количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число.
Например, если число 37(в десятичной с.с.) = 0b100101 объявлено величиной типа short (шестнадцати битовое со знаком), то его прямым кодом будет 0b0000000000100101, а если величиной типа int (тридцати двух битовое со знаком), то его прямой код будет 0b00000000000000000000000000100101. Для более компактной записи чаще используют шестнадцатеричное представление кода. Полученные коды можно переписать соответственно, как 0x0025 и 0x00000025.
Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму:
1. записываем прямой код модуля числа;
2. инвертировать его (заменить единицы нулями, нули — единицами);
3. прибавляем к инвертированному коду единицу.
2.1.3 Кодирование вещественных чисел
Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин с плавающей точкой. Любое действительное число можно записать в стандартном виде M × 10, где 1 <= M < , p — целое. Например, 120100000 = 1,201 × . Поскольку каждая позиция десятичного числа отличается от соседней на степень числа 10, умножение на 10 эквивалентно сдвигу десятичной запятой на одну позицию вправо. Аналогично деление на 10 сдвигает десятичную запятую на позицию влево. Поэтому приведенный выше пример можно продолжить: 120100000 =1,201 × = 0,1201 × = 12,01 × . Десятичная запятая "плавает" в числе и больше не помечает абсолютное место между целой и дробной частями. В приведенной выше записи M называют мантиссой числа, а p — его порядком. Для того чтобы сохранить максимальную точность, вычислительные машины почти всегда хранят мантиссу в нормализованном виде, что означает, что мантисса в данном случае есть число, лежащее между 1(10) и 2(10) (1 <= M <2). Основание системы счисления здесь, как уже отмечалось выше, — число 2.
Способ хранения мантиссы с плавающей точкой подразумевает, что двоичная запятая находится на фиксированном месте. Фактически подразумевается, что двоичная запятая следует после первой двоичной цифры, т.е. нормализация мантиссы делает единичным первый бит, помещая тем самым значение между единицей и двойкой. Место, отводимое для числа с плавающей точкой, делится на два поля. Одно поле содержит знак и значение мантиссы, а другое содержит знак и значение порядка.
Современный персональный компьютер позволяет работать со следующими действительными типами (диапазон значений указан по абсолютной величине; в некоторых случаях перечень типов данных может быть расширен):
|
Тип |
Диапазон |
Мантисса |
Байты |
|
Real |
2,9×10-39..1,7×1038 |
11-12 |
6 |
|
Single |
1,5×10-45..3,4×1038 |
7-8 |
4 |
|
Double |
5,0×10-324..1,7×10308 |
15-16 |
8 |
|
Extended |
3,4×10-4932..1,1×104932 |
19-20 |
10 |
Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double. Как видно из таблицы, величина это типа занимает в памяти 8 байт. На рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):
|
S |
Смещенный порядок |
Мантисса |
|
63 |
62..52 |
51..0 |
Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита из 64. Черта указывает здесь на положение двоичной запятой. Перед запятой обязан стоять бит целой части мантиссы, но поскольку она всегда равна 1, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка хранится здесь как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения вещественных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от - до , поэтому смещение равно 1023(10) = 1111111111(2). Наконец, бит с номером 63 указывает на знак числа. Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:
1. перевести модуль заданного числа в двоичную систему счисления;
2. нормализовать полученное двоичное число, т.е. записать в виде M × , где M — мантисса (ее целая часть равна 1(2)) и p — порядок, записанный в десятичной системе счисления;
3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;
4. учесть знак заданного числа (0 — положительное; 1 — отрицательное), и выписать его представление в памяти процессора.
2.2 Кодирование текстовой информации
С точки зрения ЭВМ текст состоит из отдельных символов. К числу символов принадлежат не только буквы алфавита (заглавные или строчные, латинские или русские), но и другие символы - цифры, знаки препинания, специальные знаки типа "=", "(", "&" и т.п. и даже пробелы, знаки табуляции. Тексты вводятся в память ЭВМ с помощью клавиатуры и других устройств ввода. На клавишах написаны привычные нам буквы, цифры, знаки препинания и другие символы. В оперативную память они попадают в двоичном виде. Это значит, что каждый символ представляется 8-разрядным двоичным кодом.
Традиционно для кодирования одного знака используется количество информации, равное 1 байту, т. е. I = 1 байт = 8 бит. При помощи формулы, которая связывает между собой количество возможных вариантов событий К и количество информации I, можно вычислить сколько отличных символов можно закодировать, т. е. для представления (считая, что символы текстовой - информации это возможные можно события)использовать : К = 2^алфавит = 2^8 =256 мощностью 256 символов. Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и строчные буквы русского и латинского алфавита, цифры, знаки, графические символы и пр.
Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичное число от 00000000 до 11111111. Таким образом, человек различает символы по их начертанию, а компьютер - по их коду. Удобство побайтового кодирования символов очевидно, поскольку байт - наименьшая адресуемая часть памяти и, следовательно, процессор ЭВМ может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов – это вполне достаточное количество для представления самой разнообразной текстовой информации.
Для вывода знака символа на экран пк делается обратный процесс — декодирование, то есть преобразование кода символа в его изображение. Важно, что присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице. Теперь возникает вопрос, какой именно восьмиразрядный двоичный код поставить в соответствие каждому символу. Понятно, что это дело условное, можно придумать множество способов кодировки.
Все символы компьютерного алфавита пронумерованы от 0 до 255. Каждому номеру соответствует восьмиразрядный двоичный код от 00000000 до 11111111. Этот код просто порядковый номер символа в двоичной системе счисления.
2.2.1 Кодировка ASCII
Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера, именуется таблицей кодировки. Для различных типов ЭВМ используются разные таблицы кодировки.
В качестве международного стандарта принята кодовая таблица ASCII (American Standard Code for Information Interchange - Американский стандартный код для информационного обмена), кодирующая первую половину символов с числовыми кодами от 0 до 127 (коды от 0 до 32 отведены не символам, а функциональным клавишам).
Таблица кодов ASCII делится на две части. Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0(00000000), до 127 (01111111).
Изначально в 1963 году кодировка ASCII была разработана для кодирования символов, коды которых помещались в 7 бит (128 символов; =128); при этом старший 7-й бит (нумерация с нуля) использовался для контроля ошибок, возникающих при передаче данных. Со временем — кодировка была расширена до 256 символов (=256); коды первых 128 символов не изменились. ASCII стала восприниматься как половина 8-битной кодировки, а «расширенной ASCII» называли ASCII с задействованным 8-м битом (например, КОИ-8).
С помощью знака Backspace (\b) (возврат на один символ) на устройстве вывода можно печатать один символ поверх предыдущего. В ASCII таким же способом можно добавить к буквам диакритические знаки, например:
- a \b ' → á
- a \b ` → à
- a \b ^ → â
- o \b / → ø
- c \b , → ç
- n \b ~ → ñ
Если в одной позиции дважды напечатать одинаковый символ — получится жирный символ; если в одной позиции напечатать символ, а затем подчёркивание «_» — получится подчёркнутый символ:
- a BS a → a
- a BS _ → a
Эта техника до сих пор используется в различных программах, например, в справочной системе man.
Структура таблицы кодировки ASCII
|
Порядковый номер символа |
Код символа |
Символ |
|
0-31 |
00000000 - 00011111 |
Управляющие символы (позволяют управлять процессом вывода текста на экран или печать, разметка текста и т.д.) |
|
32-127 |
01000000 - 01111111 |
Стандартная часть таблицы кодировки – содержит буквы латинского алфавита, десятичные цифры, знаки препинания, скобки и другие символы |
|
128-255 |
10000000 - 11111111 |
Альтернативная половина таблицы В ней размещаются национальные алфавиты, отличные от латинского. В русских вариациях ASCII(КОИ-8, CP1251 и др.)размещаются символы русского языка (кириллица). |