Равномерные и неравномерные коды

Материал из Циклопедии
Перейти к навигации Перейти к поиску

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

Преамбула[править]

Познавая окружающий мир, человек сталкивается с двумя проявлениями реальности вокруг себя. Часть окружающего мира поддаётся исчислению, представляет из себя набор объектов, каждому из которых можно сопоставить упорядоченную абстракцию — число. У человека есть одна голова, пара ушей и глаз, обычно две руки и две ноги, на каждой из которых расположены по пять пальцев. Человек может пересчитать себе подобных в семье, классе, школе, деревне или городе. Создав абстрактную систему натуральных чисел, человек получил возможность пересчитывать практически неограниченное количество объектов; ограничения накладывают только время на счёт и возможность фиксировать его результаты. Теоретически можно подсчитать количество песчинок на пляже, но сколько надо будет потратить на это времени, как и где записать промежуточные результаты и ответ — представляет собой уже отдельную задачу. Если объекты можно пересчитать с помощью целых чисел, то говорят, что система обладает дискретностью (от лат. discretus — прерывистый, разделённый)[1].

Однако существуют и другие проявления реальности, которые трудно или вообще невозможно представить в виде счётного множества (без приближения, потери точности измерений или сознательного уменьшения объёма (мощности) данного множества). Например, температура тела человека, его кровяное давление, тембр голоса, а в окружающем мире — сила электрического тока, звуки, свет, а также созданные самим человеком абстракции, такие как время.

Чтобы измерить величины этих явлений, используют их дискретизацию — измеряют температуру, давление, силу тока в определённые моменты времени, время измеряют как продолжительность (другими словами, измеряют промежутки времени между какими-либо событиями), в случае акустических сигналов измеряют их интенсивность, а сложные сигналы, такие как тембр человеческого голоса, представляют в виде совокупности гармонических сигналов. Непрерывные процессы часто называют аналоговыми (от др.-греч. ανάλογος, пропорциональный).


Температура тела человека непостоянна. В процессе жизнедеятельности у практически здорового человека она изменяется в некотором интервале, а в случае заболевания может повышаться или понижаться. Непрерывно измерять температуру тела в течение всей жизни человека нецелесообразно, поэтому на основании многих измерений принято считать, что средняя температура тела практически здорового человека составляет 36,6 градусов Цельсия. На самом деле температура человеческого тела постоянно слегка изменяется, но для удобства принимают, что в промежутки времени между измерениями средняя температура оставалась постоянной. Продолжительные участки непрерывного процесса заменяют средним значением. Часто таким образом осуществляют дискретизацию непрерывного по своей природе процесса.


Кодирование как представление информации[править]

Человечество, создав абстракцию «число», создало и множество систем представления этой абстракции в виде цифр, объединив их в системы счисления. Системы счисления, в свою очередь, делятся на позиционные и непозиционные. Первоначальной целью создания систем счисления является кодирование чисел цифрами. С появлением компьютеров возникла необходимость кодирования не только чисел, но и букв, символов, изображений, в более широком смысле — информации.

Для представления любого типа информации (чисел, букв, символов и др.) существует два основных способа — равномерное и неравномерное кодирование. Рассмотрим эти два типа кодирования в применении к компьютерам, как к самым распространённым инструментам, использующимся для обработки информации.

Равномерное кодирование[править]

Равномерное кодирование информации в компьютерах обычно осуществляется на основе алфавита — набора знаков, который используется в формальном языке. Каждый алфавит обладает мощностью — количеством содержащихся в нём знаков[2].

При равномерном кодировании все кодовые слова имеют одинаковую длину.

Персональные компьютеры состоят из полупроводниковых интегральных микросхем различного уровня сложности, совместная работа которых обеспечивается, с одной стороны, согласованностью электрических и частотных характеристик (для работы устройств на «физическом» уровне), а с другой стороны, строгим соблюдением определённых логических правил (для выполнения устройствами задач «логического» уровня). Стандартные технологии изготовления цифровых микросхем базируются на двух типах логических вентилей, или переключателей, а именно, TTL (Transistor-Transistor Logic — транзисторно-транзисторная логика, ТТЛ) и CMOS-структурах (Complementary Metal-Oxide Semiconductor, КМОП — комплементарная логика на транзисторах с изолированным затвором). Микросхемы TTL по быстродействию несколько выше, а CMOS имеют больший размах сигнала, малые входные токи и малое потребление питания.

На «физическом» уровне напряжение питания логических микросхем — постоянное напряжение +5 В относительно общего провода — шины GND (от «GrouND» — земля). В TTL — логике различают входы, выходы (обычные, тристабильные и с открытым коллектором) и двунаправленные выводы. Переключения и изменения состояния логических элементов зависит от уровня логических сигналов на входе, каковыми являются напряжения 0,36-0,5 В («логический ноль») и 2,4…2,7 В («логическая единица»). Порогом переключения состояния является уровень сигнала 1,3—1,4 В. Напряжение ниже этого порога воспринимается как низкий уровень, выше — как высокий. Состояние свободного (неподключённого) входа TTL — микросхемы рассматривается как высокоуровневое.

Таким образом, «физический» уровень работы интегральных микросхем предоставляет «логическому» уровню базис из двух состояний: «есть сигнал» — «нет сигнала». Присутствие сигнала принимают за логическую единицу, отсутствие — за логический ноль. Именно этот факт и привёл к широкому использованию двоичной системы счисления в вычислительной технике, в которой имеются только две цифры — {0 , 1}, то есть основание двоичной системы счисления p(2) = 2 . Иногда эти двоичные числа называют битами (от англ. binary digit). По умолчанию считается, что «0» — «выключено» (LOW signal), а «1» — «включено» (HIGH signal).

Пусть p — основание системы счисления, Ap — количественный эквивалент числа A, состоящего из n цифр ak, где k =0, …, n-1. Тогда число A можно представить как последовательность цифр Ap= an-1an-2a1a0 , причём всегда ak < p.

В общем случае количественный эквивалент любого положительного числа в позиционной системе счисления можно представить в виде:

Ap = an-1·pn-1+an-2·pn-2 + … + a1·p1+a0·p0, (1)

где a — цифра данной системы счисления, n — номер старшего разряда числа.

Согласно формуле (1), количественный эквивалент некоторого целого положительного n-значного числа в двоичной системе отсчёта равен:

A2 = an-1·2n-1+an-2·2n-2 + … + a1·21+a0·20. (2)

Например, 10110012 = (1·26)+(0·25)+(1·24)+(1·23)+(0·22)+(0·21)+(1·20) =64+16+8+1 = 8910.

Например, 10110012 = (1·26)+(0·25)+(1·24)+(1·23)+(0·22)+(0·21)+(1·20) =64+16+8+1 = 8910.

Здесь 10110012 — число в двоичной системе счисления, 8910 — в десятичной.

Аналогично в восьмеричной системе счисления:

12345670Q = (1·87)+(2·86)+(3·85)+(4·84)+(5·83)+(6·82)+(7·81)+(0·80)= 2097152+524288+98304+16384+2560+384+56 =273912810

В десятичной:

1234567890 = (1·109)+(2·108)+(3·107)+(4·106)+(5·105)+(6·104)+(7·103)+(8·102)+(9·101)+(0·100) = 123456789010

И в шестнадцатеричной:

ABCDEF12h = (10·167)+(11·166)+(12·165)+(13·164)+(14·163)+(15·162)+(1·161)+(2·160) = 288240001810

С помощью двоичной системы счисления кодируются тексты на разных языках, а также символы. Одной из первых таблиц соответствия кодов буквам и символам была таблица ASCII (American Standard Code for Information Interchange). Символы в ней пронумерованы в шестнадцатеричной системе счисления от 0 — 7F. Первые знакоместа в таблице занимают непечатаемые символы (0 до 7F), затем следуют печатаемые символы (20 — 7F). Недостатком такого подхода к созданию равномерного кодирования информации было то, что создание многоязычных документов являлось очень проблематичной, а в большинстве случаев и совершенно невыполнимой задачей.

Файл:CyrillicUNICODEchart.png
Таблица кодировки кириллицы в UNICODE

Этого недостатка лишена широко распространённая сейчас стандарт UNICODE, созданный консорциумом Unicode Consortium.

Этот стандарт представляет собой новую систему кодирования символов, выводимых на экран монитора или на принтер, позволяющую закодировать 1 114 112 символов (в стандарте они называются code points). Большинство символов, используемых в основных языках мира занимают 65 536 code points, образуя Basic Multilingual Plane (BMP). Оставшиеся (более миллиона) code points вполне достаточно для кодирования всех известных символов, включая малораспространённые языки и исторические знаки. Стандарт UNICODE поддерживается тремя формами, 32-битной (UTF-32), 16-битной (UTF-16) и 8-битной (UTF-8). Восьмибитная форма UTF-8 была разработана для удобной совместимости с ASCII-ориентироваными системами кодирования. Стандарт UNICODE совместим с Международным стандартом International Standard ISO/IEC 10646. В форме UTF-32 каждый символ закодирован при помощи 32-битного блока. Благодаря этому каждый символ UTF-32 обладает однозначным соответствием между декодированным символом и блоком кода. Это форма имеет фиксированную длину знакоместа. Она покрывает все кодовое пространство UNICODE — 0…10FFFF16. Это гарантирует полную совместимость с UTF-16 и UTF-8. Форма UTF-32 является наиболее предпочитаемой для большинства UNIX платформ.

Стандарт UNICODE содержит 96 382 символа, взятых их мировых шрифтов. Этих символов более чем достаточно для общения на всех известных языках мира, а также для написания классических (исторических) шрифтов многих языков. UNICODE включает в себя шрифты европейских алфавитов, средне-азиатское письмо, направленное справа на лево, шрифты Азии, и многие другие. Подмножество символов (code points) HUN включает 70 207 идеографических символов определяемых по национальным и промышленным стандартам Китая, Японии, Кореи, Тайвани, Вьетнама и Сингапура. Более того, UNICODE содержит знаки пунктуации, математические символы, технические символы, геометрические формы и графические метки (dingbats), а также фонетические знаки.

Стандарт UNICODE 4.0, например, содержит 96 382 символа, взятых их мировых шрифтов. Этих символов более чем достаточно для общения на всех известных языках мира, а также для написания классических (исторических) шрифтов многих языков. UNICODE включает в себя шрифты европейских алфавитов, средне-азиатское письмо, направленное справа на лево, шрифты Азии, и многие другие. Подмножество символов (code points) HUN включает 70 207 идеографических символов определяемых по национальным и промышленным стандартам Китая, Японии, Кореи, Тайвани, Вьетнама и Сингапура. Более того, UNICODE содержит знаки пунктуации, математические символы, технические символы, геометрические формы и графические метки (dingbats), а также фонетические знаки.

Неравномерное кодирование[править]

При неравномерном кодировании информация кодируются блоками не постоянной, а переменной длины. Это необходимо для уменьшения объёмов передаваемой и обрабатываемой информации[3].

При неравномерном кодировании коды разных знаков, букв или символов могут иметь разную длину.

Использование блоков переменной длины позволяет сокращать длину информационного сообщения. Объём передаваемой информации можно уменьшить, если кодировать длину блока в зависимости от частоты встречаемости кодируемой информации. Например, в русском языке наиболее часто встречающимися символами являются пробел, буквы «е», «о», «а». Их разумно кодировать короткими кодами, а символы, встречающиеся реже — более длинными кодами. Это позволяет сократить объёмы передаваемой информации в сети Интернет.

Одной из самых известных систем неравномерного кодирования является азбука Морзе, использующая для кодирования информации комбинации точек и тире с разным их количеством для разных кодовых слов (символов).

Примечания[править]

  1. Нейгебавуэр О. Точные науки в древности. — М.: Наука, 1968.
  2. Таненбаум Э. Архитектура компьютера. — СПб.: БХВ-Петербург, 2002.
  3. Иртегов Д. В. Введение в операционные системы. — СПб.: БХВ-Петербург, 2002.

Литература[править]

  • Нейгебавуэр О. Точные науки в древности. — М. : Наука, 1968.
  • Депман И. Я. История арифметики. — М. : Просвещение, 1965.
  • Башков Е. А. Аппаратное и программное обеспечение зарубежных ЭВМ. — К. : Выща школа, 1990.
  • Погорелый С. Д., Слободянюк Т. Ф. Программное обеспечение микропроцессорных систем: Справочник. — К. : Тэхника, 1989.
  • Токхайм Р. Микропроцессоры: Курс и упражнения. — М. : Энергоатомиздат, 1988.
  • Юров В. Assembler. — СПб. : Питер, 2000.
  • Девис У. Операционные системы. Функциональный подход. — М. : Мир, 1980.
  • Иртегов Д. В. Введение в операционные системы. — СПб. : БХВ-Петербург, 2002.
  • Зубков С. В. Assembler для DOS, Windows и Unix. — М. : ДМК Пресс, 2000.
  • Таненбаум Э. Архитектура компьютера. — СПб. : Питер, 2002.
  • Рабинович З. Л., Раманаускас В. А. Типовые операции в вычислительных машинах. — К. : Техніка, 1980.
  • Бериан Б. Программирование на языке ассемблера системы IBM/370. Упрощенный подход. — М. : Мир, 2000.

Ссылки[править]

Рувики

Одним из источников, использованных при создании данной статьи, является статья из википроекта «Рувики» («ruwiki.ru») под названием «Равномерные и неравномерные коды», расположенная по адресу:

Материал указанной статьи полностью или частично использован в Циклопедии по лицензии CC-BY-SA 4.0 и более поздних версий.

Всем участникам Рувики предлагается прочитать материал «Почему Циклопедия?».