Кодирование информации

Формальный язык

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

Язык задается алфавитом, синтаксисом и семантикой. Язык программирования – это формальный язык, обеспечивающий описание конкретных проблем, формулируемых человеком и решаемых с помощью компьютера.

Алфавит представляет собой совокупность упорядоченных в определенном смысле символов (букв) в данном языке или системе. Только символы, принадлежащие данному алфавиту, можно использовать для построения слов.

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

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

Транслятор (от англ. translator – переводчик) – это программа, производящая трансляцию программы с одного языка программирования в другой.

Под семантикой (от греч. semantikos – обозначающий) понимается смысл каждой синтаксической конструкции в языке или системе.

В языке программирования транслятор переводит синтаксические конструкции языка программирования в команды, понятные операционной системе и процессору. Смысловые ошибки транслятор выявить не может, их поиск происходит во время отладки, тестирования и использования программы человеком.

Кодирование информации

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

Дело в том, что физические устройства (регистры, ячейки памяти) могут находиться в двух состояниях, которым соотносят 0 или 1. Используя ряд подобных физических устройств, можно хранить в памяти компьютера почти любое число в двоичной системе счисления. Сколько физических ячеек используемых для записи числа, столько и разрядное число можно записать. Если ячеек 8, то и число может состоять из 8 цифр.

Кодирование в компьютере целых чисел, дробных и отрицательных, а также символов (букв и др.) имеет свои особенности для каждого вида. Например, для хранения целых чисел выделяется меньше памяти (меньше ячеек), чем для хранения дробных независимо от их значения.

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

В общем смысле кодирование информации можно определить как перевод информации, представленной сообщением в первичном алфавите, в последовательность кодов.

Надо понимать, что любые данные - это так или иначе закодированная информация. Информация может быть представлена в разных формах: в виде чисел, текста, рисунка и др. Перевод из одной формы в другую - это кодирование.

Натуральные числа (целые положительные числа)

Обычно ячейка памяти равна 1 байту, который в свою очередь равен 8 битам. Т.е. в одной ячейке памяти можно сохранить восьмиразрядное число в двоичной системе счисления. Очевидно, что минимальным таким числом будет 00000000, а максимальным 11111111.

Если представить число 11111111 в десятичной системе счисления, то мы получим число 255. Т.е в одном байте можно сохранять целые положительные числа от 0 до 255 включительно (всего 256 значений, что соответствует 28).

Для хранения чисел имеющих значение большее, чем 255, используют большее количество байтов. Так в двух байтах можно хранить число, состоящее из 16 разрядов. Можно узнать количество возможных комбинаций нулей и единиц для 16-ти разрядного числа: 216 = 65536. Т.е. в двух байтах можно сохранить любое число от 0 до 65535.

Для примера посчитаем, количество значений, которые можно сохранить, если использовать 4-х байтную ячейку памяти (такая ячейка имеет 32 разряда):

232 = 4 294 967 296,

т.е. более 4 миллиардов.

Представление положительных и отрицательных чисел в памяти компьютера. Прямой и дополнительный код числа

Раздел: 
Информатика как наука

Прямой код

Прямой код – это представление числа в двоичной системе счисления, при котором первый (старший) разряд отводится под знак числа. Если число положительное, то в левый разряд записывается 0; если число отрицательное, то в левый разряд записывается 1.

Таким образом, в двоичной системе счисления, используя прямой код, в восьмиразрядной ячейке (байте) можно записать семиразрядное число. Например:

0 0001101 – положительное число
1 0001101 – отрицательное число

Количество значений, которые можно поместить в семиразрядной ячейке со знаком в дополнительном разряде равно 256. Это совпадает с количеством значений, которые можно поместить в восьмиразрядную ячейку без указания знака. Однако диапазон значений уже другой, ему принадлежат значения от -128 до 127 включительно (при переводе в десятичную систему счисления).

При этом в вычислительной технике прямой код используется почти исключительно для представления положительных чисел.

Для отрицательных чисел используется так называемый дополнительный код. Это связано с удобством выполнения операций над числами электронными устройствами компьютера.

Дополнительный код

В дополнительном коде, также как и прямом, первый разряд отводится для представления знака числа. Прямой код используется для представления положительных чисел, а дополнительный – для представления отрицательных. Поэтому, если в первом разряде находится 1, то мы имеем дело с дополнительным кодом и с отрицательным числом.

Все остальные разряды числа в дополнительном коде сначала инвертируются, т.е. заменяются противоположными (0 на 1, а 1 на 0). Например, если 1 0001100 – это прямой код числа, то при формировании его дополнительного кода, сначала надо заменить нули на единицы, а единицы на нули, кроме первого разряда. Получаем 1 1110011. Но это еще не окончательный вид дополнительного кода числа.

Далее следует прибавить единицу к получившемуся инверсией числу:

1 1110011 + 1 = 1 1110100

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

Причина, по которой используется дополнительный код числа для представления отрицательных чисел, связана с тем, что так проще выполнять математические операции. Например, у нас два числа, представленных в прямом коде. Одно число положительное, другое – отрицательное и эти числа нужно сложить. Однако просто сложить их нельзя. Сначала компьютер должен определить, что это за числа. Выяснив, что одно число отрицательное, ему следует заменить операцию сложения операцией вычитания. Потом, машина должна определить, какое число больше по модулю, чтобы выяснить знак результата и определиться с тем, что из чего вычитать. В итоге, получается сложный алгоритм. Куда проще складывать числа, если отрицательные преобразованы в дополнительный код. Это можно увидеть на примерах ниже.

Операция сложения положительного числа и отрицательного числа, представленного в прямом коде

  1. Прямой код числа 5: 0 000 0101
    Прямой код числа -7: 1 000 0111
  2. Два исходных числа сравниваются. В разряд знака результата записывается знак большего исходного числа.
  3. Если числа имеют разные знаки, то вместо операции сложения используется операция вычитания из большего по модулю значения меньшего. При этом первый (знаковый) разряд в операции не участвует.
    _ 000 0111
      000 0101
    -------------
      000 0010
    
  4. После выполнения операции учитывается первый разряд. Результат операции 1 000 0010, или -210.

Операция сложения положительного числа и отрицательного числа, представленного в дополнительном коде

  1. Прямой код числа 5: 0 000 0101
    Прямой код числа -7: 1 000 0111
  2. Формирование дополнительного кода числа -7.
    Прямой код : 1 000 0111
    Инверсия : 1 111 1000
    Добавление единицы: 1 111 1001
  3. Операция сложения.
      0 000 0101
    + 1 111 1001
      --------------
      1 111 1110
    
  4. Проверка результата путем преобразования к прямому коду.
    Дополнительный код: 1 111 1110
    Вычитание единицы : 1 111 1101
    Инверсия : 1 000 0010 (или -210)

Кодирование вещественных чисел. Нормализованное представление числа

Раздел: 
Информатика как наука

В компьютерной технике вещественными называются числа, имеющие дробную часть.

Дробные числа могут содержать большой набор цифр. Например: 0.0000345 или 10900000 (т.е очень большие или очень маленькие числа). Для удобства вещественные числа приводят к виду так называемого нормализованного представления числа. Заключается такое представление в том, что число записывается в виде произведения на основание системы счисления, возведенное в ту или иную степень. Например, предыдущие два числа в нормализованном виде будут выглядеть так: 0.345 * 10-4 и 0.109 * 108. Здесь числа 0.345 и 0.109 – мантиссы вещественных чисел, 10 – основание системы счисления, а -4 и 8 – порядки. При этом запятая (точка), разделяющая дробную и целую части ставится перед первой значащей цифрой (отличной от 0).

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

Понятно, что нормализированное представление используется не только для десятичной системы счисления. Вот примеры нормализованных записей дробных чисел в двоичной системе счисления:

101.11 = 0.10111 * 211
0.001 = 0.1 * 2-10

Здесь степени 11 и 10 – это двоичная форма десятичных чисел 3 и 2.

Нормализованная форма представления числа – это одна из форм множества вариантов экспоненциальной формы записи числа.

Пусть слово состоит из 2 байт, два слова – это 4 байта или 32 бита.

Нормализированное число одинарной точности, представленное в формате с плавающей точкой, записывается в память следующим образом: знак числа – в бите 15 первого слова (0 – для положительных и 1 – для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах (с 0 по 6 бит первого слова и все биты второго слова). Нормализированное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым словом трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит.

Порядок числа, представленного в формате с плавающей точкой, изменяется в диапазоне от -128 до +127 и запоминается увеличенным на 128. Такой способ представления порядка называется смещенным.

Следует иметь в виду, что, хотя для мантиссы отведено 23 разряда для чисел одинарной точности и 55 разрядов – для чисел двойной точности, в операциях участвует 24 и 56 разрядов соответственно, т.к. старший разряд мантиссы нормализированного числа не хранится, т.е. имеет место так называемый скрытый разряд. Однако при аппаратном выполнении операций этот разряд автоматически восстанавливается и учитывается. Порядок числа также учитывает скрытый старший разряд мантиссы.

Нормализованная мантисса в двоичной системе счисления всегда представляется десятичным числом m, лежащим в диапазоне 0,5 <= m < 1.

Пример представления числа в формате с плавающей точкой:

0.110 = 0.000(1100)2 = 0.(1100)2*2-3
-310 = (-3 + 128)10 = 011111012.

Если мантисса представлена бесконечной периодической дробью, то последний учитываемый разряд мантиссы округляется.

-49.510 = -110001.1002 = -0.11000112*26
610 = (6 + 128)10 = 100001102.

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

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

Представление целых чисел в памяти ЭВМ. Индикаторы переноса и переполнения

Раздел: 
Информатика как наука

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

Предположим, что процессор ЭВМ способен увеличивать (прибавлять 1) и дополнять (инвертировать) четырехбитовые слова. Например, результатом увеличения слова 1100 является 1101, а результатом дополнения этого слова является 0011. Рассмотрим слово 0000, представляющее десятичное число 0. В результате увеличения содержимое этого слова станет равным 0001, что соответствует десятичному числу 1. Продолжая последовательно увеличивать четырехбитовые слова, придем к ситуаци, когда, увеличивая слово 1111 (которое представляет десятичное число 15), получим в результате слово 0000, т.е. 1111 + 1 = (1)0000. Т.е. Получили неверную арифметическую операцию и вернулись в исходное состояние. Это произошло из-за того, что слово памяти может состоять из конечного числа бит. Таким образом, числовая система ЭВМ является конечной и цикличной.

Можно битовую конфигурацию 1111 принять за код для -1. Тогда 1110 интерпретируется как -2, 1101 как -3, 1000 как -8. Тем самым получили другую числовую систему — со знаком, содержащую как положительные, так и отрицательные числа. В этой системе половина четырехбитовых конфигураций, начинающаяся с единицы, интерпретируется как отрицательные числа, а другая половина, начинающаяся с нуля, - как положительные числа или нуль. Поэтому старший бит числа (третий по счету, если нумерацию бит начинать с нуля справа налево) называется знаковым битом. Числовая система со знаком также конечна и циклична, арифметически неверный результат даст попытка увеличить число 7 на единицу (0111 + 1 = 1000 = -810).

Если знаковый бит равен нулю, то значение числа легко вычисляется — игнорируется знаковый бит, а оставшиеся три бита интерпретируются как двоичный код десятичного числа. Например, слово 0110 представляет двоичное число 110, которое равно десятичному числу 6.

Для оценки отрицательного числа нужно изменить его знак. Рассмотрим четырехбитовое число k в системе со знаком. Тогда -k = (-1 - k) + 1, следовательно, для вычисления значения -k необходимо вычесть k из -1 (т.е. из 1111) и затем прибавить единицу. Заметим, что операция вычитания всегда возможна, никогда не требует заема и равнозначна операции инвертирования битов вычитаемого. Например, 1111 - 1011 = 0100; здесь в вычитаемом, равном 1011, единицы перешли в нули, а нуль — в единицу. Инвертирование бит в слове называется дополнением до единицы. Для определения отрицательного значения числа k надо к его дополнению до единицы прибавить единицу (согласно вышеприведенному равенству). Инвертирование бит в слове с добавлением единицы к младшему биту называется дополнением до двух. Например, требуется найти, какое число закодировано в слове 1001. Для этого сначала выполняем операцию инвертирования: 1001 -> 0110, а затем к полученному результату прибавляем единицу 0110 + 1 = 0111, что является двоичным кодом числа 7. Таким образом, значением 1001 является число -7.

Индикаторы переноса и переполнения

Рассмотрим более подробно ситуацию, приводящую при увеличении четырехбитового числа (т.е. при прибавлении к нему единицы) к неверному арифметическому результату, возникающему из-за конечности числовой системы ЭВМ. В числовой системе без знака такая проблема встает при увеличении слова 1111, при этом имеет место перенос единицы из знакового бита в никуда. В случае системы чисел со знаком перенос из старшего бита дает верный результат: 1111 + 0001 = (1)0000 (что правильно: -1 + 1 = 0), но увеличение слова 0111 приводит к ошибочной ситуации: 0111 + 1 = 1000 (7 + 1 = -8), при этом имеет место перенос в знаковый бит.

В процессоре ЭВМ (той его части, которая ответственна за выполнение арифметических операций) имеется два индикатора — индикатор переноса и индикатор переполнения. Каждый индикатор содержит один бит информации и может быть установлен процессором (в этом случае ему придается значение, равное единице) или сброшен (равен нулю). Индикатор переноса указывает за перенос из знакового бита за пределы слова, а индикатор переполнения на перенос в знаковый бит. Таким образом, после завершения операции, в которой происходит перенос в самый старший бит, процессор устанавливает индикатор переполнения; если такого переноса нет, то индикатор переполнения сбрасывается. Индикатор переноса обрабатывается аналогичным образом.

Важно то, что после выполнения операции процессором ЭВМ сигнализирует о состоянии индикаторов, и их можно проверить. Если состояние индикаторов указывает на неправильный арифметический результат, то необходимо исправить эту ситуацию, т.е. пользователю ЭВМ предоставляется возможность контролировать правильность выполнения арифметических операций.

Пример 1
Рассмотрим сложение двух чисел: 0101 + 0011 = 1000. В результате выполнения операции сложения произошел перенос в знаковый бит, а переноса из знакового бита не было. Таким образом, после завершения этой операции индикатор переноса будет сброшен, а индикатор переполнения установлен. Поэтому если рассматривать эти два числа как целые без знака, то результат является арифметически правильным, т.к. индикатор переноса сброшен. Если же рассматривать числа в системе со знаком, то бит переполнения показывает, что произошло изменение знака (перенос в знаковый бит есть, а перенос из него — нет), поэтому арифметически результат неправильный.

Пример 2
В результате сложения чисел 1101 + 0101 = 0010 происходит перенос в знаковый бит и из знакового бита. Поэтому будет установлен индикатор переноса, а индикатор переполнения сброшен. Следовательно, в системе чисел без знака результат является арифметически неправильным, а в системе чисел со знаком — правильным.

Пример 3
В результате выполнения операции вычитания: 1001 - 0011 = 1001 + (-0011) = 1001 + (1100 + 1) = 1001 + 1101 = 0110 происходит перенос из знакового бита, а перенос в знаковый бит нет. Следовательно, индикатор переноса будет сброшен, а индикатор переполнения установлен. Это указывает на то, что в данном примере в системе без знака результат арифметически правильный, а в системе со знаком — неправильный.

Кодирование символов. Unicode

Раздел: 
Кодирование информации

Любые числа (в определенных пределах) в памяти компьютера кодируются числами двоичной системы счисления. Для этого существуют простые и понятные правила перевода. Однако на сегодняшний день компьютер используется куда шире, чем в роли исполнителя трудоемких вычислений. Например, в памяти ЭВМ хранятся текстовая и мультимедийная информация. Поэтому возникает первый вопрос:

Как в памяти компьютера хранятся символы (буквы)?

Каждая буква принадлежит определенному алфавиту, в котором символы следуют друг за другом и, следовательно, могут быть пронумерованы последовательными целыми числами. Каждой букве можно сопоставить целое положительное число и назвать его кодом символа. Именно этот код будет храниться в памяти компьютера, а при выводе на экран или бумагу «преобразовываться» в соответствующий ему символ. Чтобы отличить представление чисел от представления символов в памяти компьютера, приходится также хранить информацию о том, какие именно данные закодированы в конкретной области памяти.

Соответствие букв определенного алфавита с числами-кодами формирует так называемую таблицу кодирования. Другими словами, каждый символ конкретного алфавита имеет свой числовой код в соответствии с определенной таблицей кодирования.

Однако алфавитов в мире очень много (английский, русский, китайский и др.). Поэтому следующий вопрос:

Как закодировать все используемые на компьютере алфавиты?

Для ответа на этот вопрос пойдем историческим путем.

В 60-х годах XX века в американском национальном институте стандартизации (ANSI) была разработана таблица кодирования символов, которая впоследствии была использована во всех операционных системах. Эта таблица называется ASCII (American Standard Code for Information Interchange – американский стандартный код для обмена информацией). Чуть позже появилась расширенная версия ASCII.

В соответствие с таблицей кодирования ASCII для представления одного символа выделяется 1 байт (8 бит). Набор из 8 ячеек может принять 28 = 256 различных значений. Первые 128 значений (от 0 до 127) постоянны и формируют так называемую основную часть таблицы, куда входят десятичные цифры, буквы латинского алфавита (заглавные и строчные), знаки препинания (точка, запятая, скобки и др.), а также пробел и различные служебные символы (табуляция, перевод строки и др.). Значения от 128 до 255 формируют дополнительную часть таблицы, где принято кодировать символы национальных алфавитов.

Поскольку национальных алфавитов огромное множество, то расширенные ASCII-таблицы существуют во множестве вариантов. Даже для русского языка существуют несколько таблиц кодирования (распространены Windows-1251 и Koi8-r). Все это создает дополнительные трудности. Например, мы отправляем письмо, написанное в одной кодировке, а получатель пытается прочитать ее в другой. В результате видит кракозябры. Поэтому читающему требуется применить для текста другую таблицу кодирования.

Есть и другая проблема. В алфавитах некоторых языков слишком много символов и они не помещаются в отведенные им позиции с 128 до 255 однобайтовой кодировки.

Третья проблема - что делать, если в тексте используется несколько языков (например, русский, английский и французский)? Нельзя же использовать две таблицы сразу …

Чтобы решить эти проблемы одним разом была разработана кодировка Unicode.

Стандарт кодирования символов Unicode

Для решения вышеизложенных проблем в начале 90-х был разработан стандарт кодирования символов, получивший название Unicode. Данный стандарт позволяет использовать в тексте почти любые языки и символы.

В Unicode для кодирования символов предоставляется 31 бит (4 байта за вычетом одного бита). Количество возможных комбинаций дает запредельное число: 231 = 2 147 483 684 (т.е. более двух миллиардов). Поэтому Unicode описывает алфавиты всех известных языков, даже «мертвых» и выдуманных, включает многие математические и иные специальные символы. Однако информационная емкость 31-битового Unicode все равно остается слишком большой. Поэтому чаще используется сокращенная 16-битовая версия (216 = 65 536 значений), где кодируются все современные алфавиты.

В Unicode первые 128 кодов совпадают с таблицей ASCII.

Кодирование звуковой информации

Аналоговая и цифровая информация

Физически звук представляет собой волновые колебания давления в той или иной среде. Каковы бы ни были физические характеристики колебаний, в данном случае важно то, что звук представляет собой нечто неделимое на части (непрерывное), пробегающее в пространстве и времени. Чтобы записать звук на какой-нибудь носитель можно соотнести его уровень (силу) с какой-нибудь измеряемой характеристикой этого носителя. Так, например, степень намагниченности магнитной ленты в различных ее местах зависит от особенностей звука, который на нее записывался. Намагниченность может непрерывно изменяться на протяжении ленты, подобно тому, как параметры звука могут меняться в воздухе. Т.е. магнитная лента прекрасно справляется с задачей хранения звука. И хранит его в так называемой аналоговой форме, когда значения изменяются непрерывно (плавно), что близко к естественному звуку.

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

Дискретизация и квантование

При преобразовании звуковой информации в цифровую форму ее подвергают дискретизации и квантованию. Дискретизация заключается в замерах величины аналогового сигнала огромное множество раз в секунду. Полученной величине аналогового сигнала сопоставляется определенное значение из заранее выделенного диапазона: 256 (8 бит) или 65536 (16 бит). Привидение в соответствие уровня сигнала определенной величине диапазона и есть квантование.

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

Также, чем больше бит отведено под кодирование уровня сигнала (квантование), тем точнее соответствие.

С другой стороны, звук хорошего качества будет содержать больше данных и, следовательно, больше занимать места на цифровом носителе информации.

В качестве примера можно привести такие расчеты. Для записи качественной музыки аналоговый звуковой сигнал измеряют более 44 000 раз в секунду и квантуют 2 байтами (16 бит дает диапазон из 65536 значений). Т.е. за одну секунду записывается 88 000 байт информации. Это равно (88 000 / 1024) примерно 86 Кбайт. Минута обойдется уже в 5168 Кбайт (86*60), что немного больше 5 Мб.

Графики кодирования звуковой информации
Изображения, использованные в статье

Представление в компьютере информации: дискретизация и квантование

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

Когда мы зрительно наблюдаем ту или иную область пространства и хотим сохранить ее описание, то приходим к выводу, что сделать это можно по-разному. Если планируется сохранить информацию в виде графического изображения, значит надо как-то описать каждый элемент области пространства. Но что это за элементы? Пространство непрерывно, одну и туже область можно разделить на десятки элементов, можно на тысячи, а можно согласиться с тем, что в нем бесчисленное количество элементов - различных точек, которые в свою очередь делятся на микроточки и т.д.

Компьютерная же память не резиновая. В ней невозможно сохранить бесконечно много информации. Только ограниченное количество, пусть и большое. Поэтому предполагаемое для описания пространство, должно быть умозрительно разделено на ограниченное количество элементов. И именно описание этих элементов будет сохранено в компьютерной памяти.

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

Итак, мы условно разбили реальность на области и планируем хранить информацию только о них. Но какую информацию? Если это изображение, то наверно это должны быть какие-то характеристики изображения. Чем характеризуется изображение? Как минимум цветом и яркостью. А ведь эти характеристики также не дискретны, а могут иметь множество непрерывных значений и подзначений. Так степень яркости можно измерять очень точно, а можно приблизительно. Если обозначить полное отсутствие освещенности нулем, а ее максимальное значение – 99 и хранить только целые значения, то их окажется всего 100. Для возможности хранения 100 различных значений достаточно 27 = 128 бит. Но ведь можно измерять и сохранять степень яркости очень точно до тысячных долей единицы и тогда для хранения потребуется намного больше памяти (чтобы было можно записать туда все возможные значения).

Разделение непрерывного ряда значений какой-либо характеристики на ограниченное количество диапазонов называют квантованием. В компьютере сохраняется лишь номер диапазона, в который попало конкретное значение свойства.

Если при дискретизации разделяется время или пространство, то при квантовании этому подвергаются возможные значения свойств.

Понятно, что чем более дискретна и квантована естественная информация, тем более точно она сохранена в памяти компьютера. Однако этой памяти потребуется больше.

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

Хранение графической информации
Изображения, использованные в статье

Растровая и векторная графика

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

Растровая и векторная графика создается в специальных программах — графических редакторах и процессорах. Например, программы Paint и Gimp являются растровыми, а Inkscape — векторым.

Растровая графика

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

Пиксель – наименьший элемент изображения на экране компьютера. Размер экранного пикселя приблизительно 0,0018 дюйма.

Растровый рисунок похож на мозаику, в которой каждый элемент (пиксель) закрашен определенным цветом. Этот цвет закрепляется за определенным местом экрана. Перемещение фрагмента изображения "снимает" краску с электронного холста и разрушает рисунок.

Информация о текущем состоянии экрана хранится в памяти видеокарты. Информация может храниться и в памяти компьютера - в графическом файле данных.

Самыми близкими аналогами растровой графики является живопись, фотография.

Кодирование графической информации

Качество изображения определяется разрешающей способностью экрана и глубиной цвета.

Число цветов (К), воспроизводимых на экране дисплея, зависти от числа бит (N), отводимых в видеопамяти под каждый пиксель:
K=2N

Для получения богатой палитры цветов базовым цветам могут быть заданы различные интенсивности. Например, при глубине цвета в 24 бита на каждый из цветов выделяется по 8 бит (RGB), т.е. для каждого из цветов возможны K = 28 = 256 уровней интенсивности. Один бит видеопамяти занимает информация об одном пикселе на черно-белом экране (без полутонов).

Величину N называют битовой глубиной.

Страница - раздел видеопамяти, вмещающий информацию об одном образе экрана (одной "картинке" на экране). В видеопамяти одновременно могут размещаться несколько страниц.

Если на экране с разрешающей способностью 800 х 600 высвечиваются только двухцветные изображения, то битовая глубина двухцветного изображения равна 1, а объем видеопамяти на одну страницу изображения равен 800 * 600 * 1 = 480000 бит = 60000 байт.

Для хранения двух страниц изображения при условии, что разрешающая способность дисплея равна 640 х 350 пикселей, а количество используемых цветов — 16 будет таким: 640 * 350 * 4 * 2 = 1792000 бит = 218,75 Кбайт
Количество используемых цветов - 16, это 24, значит, битовая глубина цвета равна 4.

Векторная графика

В векторной графике изображение состоит из простых элементов, называемых примитивами: линий, окружностей, прямоугольников, закрашенных областей. Границы областей задаются кривыми.

Файл, отображающий векторное изображение, содержит начальные координаты и параметры примитивов – векторные команды.

Самым близким аналогом векторной графики является графическое представление математических функций. Например, для описания отрезка прямой достаточно указать координаты его концов, а окружность можно описать, задав координаты центра и радиус.

Информация о цвете объекта сохраняется как часть его описания, т.е. тоже в векторной команде.

Векторные команды сообщают устройству вывода о том, что необходимо нарисовать объект, используя заложенное число элементов-примитивов. Чем больше элементов используется, тем лучше этот объект выглядит.

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

Файлы векторной графики могут содержать растровые объекты.

Достоинства векторной графики

Недостатки векторной графики

RGB модель

Раздел: 
Информатика как наука

Экран монитора в графическом режиме разбит на точки (пиксели). Изображение формируется путем сочетания различных цветов и оттенков каждой точки.

Кодирование цвета может быть различным. Для создания изображения на экране монитора обычно используется цветовая модель RGB (Red – красный, Green – зеленый, Blue – синий).

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

Но сколько уровней яркости существует для каждого цвета? Ответ на этот вопрос скажет, сколько различных цветов и оттенков может принять каждая точка.

Если каждый из трех может быть только в двух состояниях (0 и 1), то всего мы можем получить 23 = 8 цветов. Так, например, если красный и зеленый будут на максимуме (1), а синий выключен (0), то получится чистый желтый цвет.

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

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

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

На гранях куба расположены самые насыщенные цвета, внутри куба – менее насыщенные (начинают подмешиваться серые оттенки).

Цветовой куб модели RGB
Изображения, использованные в статье