Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







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





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

В случае черно-белого изображения каждая точка может иметь всего два цвета; естественно кодировать их нулем (точка не светится, т.е. черная) или единицей (белая). Для того чтобы наглядно представить себе, как хранится в памяти ЭВМ простейшее изображение, рассмотрим для примера нарисованный на черном фоне белый квадратик размером 4 x 4. В черно-белом режиме это будет выглядеть весьма компактно (сначала для наглядности приведен двоичный, а затем шестнадцатеричный вид):

1111 F

1001 9

1001 9

1111 F

Теперь увеличим число цветов — пусть их будет 16. Если принять, что все имеющиеся цвета пронумерованы от нуля, то для хранения информации о цвете одной точки потребуется 4 бита: 24 = 16. Следовательно, в режиме 16-цветной графики тот же самый квадратик займет памяти в 4 раза больше, т.к. каждая точка уже будет кодироваться четырьмя битами:

1111 1111 1111 1111 F F F F

1111 0000 0000 1111 F 0 0 F

1111 0000 0000 1111 F 0 0 F

1111 1111 1111 1111 F F F F

Аналогичным образом при увеличении количества цветов до 256 на каждый пиксель требуется уже по байту, и наш квадратик разрастется еще вдвое:

11111111 11111111 11111111 11111111 FF FF FF FF

11111111 00000000 00000000 11111111 FF 00 00 FF

11111111 00000000 00000000 11111111 FF 00 00 FF

11111111 11111111 11111111 11111111 FF FF FF FF

Обратите внимание на то, что белый цвет, как самый яркий, обычно имеет максимально возможный номер. Поэтому для черно-белого режима он равен 1, для 16-цветного — 15, а для 256 цветов — 255. Промежуточные значения позволяют закодировать все остальные цвета.

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



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

Примечание. Если быть несколько более точным, код цвета обычно составлен из трех частей, каждая из которых характеризует интенсивность красной, зеленой и синей цветовых составляющих (так называемая “модель RGB”). Тем не менее части кода хранятся вместе и формально могут считаться единым числом. Интересно заметить, что при 2-байтовом кодировании цвета общее число битов на три равные части не делится; “лишний” шестнадцатый бит либо не используется, либо присоединяется к зеленой компоненте, поскольку именно к ней человеческий глаз наиболее чувствителен.

 

Системы счисления

Теоретической основой кодирования чисел является подробным образом развитая в математике теория систем счисления. Система счисления — это способ записи чисел с помощью фиксированного числа знаков. Последние имеют общепринятое название — цифры.

Системы счисления весьма разнообразны. Прежде всего они делятся на позиционные и непозиционные. Позиционной называется система счисления, в которой количественный эквивалент цифры зависит от ее положения в записи числа; в противном случае система является непозиционной. Большинство используемых на практике систем позиционно, поскольку именно для них обеспечивается наиболее простая арифметика.
В частности, используемая в быту система представления чисел позиционная (сравните значение цифры 2 в записи чисел 132 и 123!). Что же касается непозиционных систем, то сюда относятся хорошо известный римский способ записи чисел, а также унарная система, с которой вы, вероятно, встречались в первом классе (вспомните счетные палочки!).

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

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

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

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

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

Частным случаем указанного выше способа является перевод из десятичной системы счисления в двоичную, который нужен, чтобы узнать представление в компьютере произвольного десятичного числа. Опуская подробности , напомним, как выглядит процесс перевода числа 20(10) в двоичный код:

Остается “собрать” итоговое двоичное число из остатков от деления, не забывая при этом, что старшие разряды получаются всегда позднее, чем младшие. В итоге получим: (20)10 = (10100)2.

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

(10100)2 = 1 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 0 x 20 =

= 16 + 4 = (20)10.

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

Обратимся теперь к проблеме громоздкости двоичного кода. Если посмотреть на двоичное число, представляющее собой представление некоторого десятичного с весьма умеренным числом цифр (например, трех- или четырехзначного числа), то обнаружится, что выглядит это чрезмерно длинно. Более того, длинная “однообразная” цепочка из нулей и единиц очень плохо воспринимается глазами. Чтобы облегчить ситуацию, для более компактной записи используется восьмеричная или шестнадцатеричная система счисления. Особенностью данных оснований является тот факт, что и 8, и 16 есть степени двойки, а значит, перевод между ними и двоичной системой максимально прост. Учитывая, что 8 = 23, а 16 = 24, получаем, что каждая восьмеричная цифра объединяет ровно 3 двоичных разряда, а шестнадцатеричная — 4.

Отсюда немедленно следует алгоритм перевода из двоичной системы в восьмеричную (шестнадцатеричную):

··сгруппировать двоичные разряды справа налево по три (четыре); если в старшей (т.е. самой левой) группе битов не хватает, их можно дополнить слева незначащими нулями;

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

Например:

110102 = 0001 1010 = 1A16.

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

Для облегчения процессов перевода удобно составить таблицу соответствия между восьмеричными или шестнадцатеричными цифрами и их двоичными кодами.

Остается обсудить вопросы, связанные с двоичной арифметикой. Отметим, что арифметические действия в системах счисления с любыми основаниями производятся по одинаковым правилам. Единственное отличие состоит в том значении, при превышении которого возникает перенос в следующий разряд. В общепринятой десятичной системе “критическое” значение равно 10 (вспомните: “8 + 7 = 15, 5 пишем, 1 в уме”).
В двоичной системе, где нет никаких цифр, кроме 0 и 1, перенос наступает, когда в разряде получается результат, равный 2 (или больше). Нетрудно сообразить, что минимальное значение, при котором возникает перенос, равно количеству цифр и, следовательно, основанию системы счисления.

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

Сложение двух чисел в системе счисления с основанием N осуществляется поразрядно от младших разрядов к старшим (“справа налево”, если смотреть на запись числа). Когда сумма данного разряда S не превышает значения N, результат сложения является окончательным. Если же S N, то происходит перенос в старший (“более левый”) разряд, причем каждая единица переноса уменьшает значение S на величину N.

Можно сформулировать аналогичные правила и для остальных арифметических операций. После этого достаточно положить N = 2, и мы получим правила арифметики для двоичной системы.

или в десятичной системе 6 + 10 = 16

Для выполнения арифметических операций (сложение, вычитание, умножение, деление) в системе счисления с основанием P необходимо иметь соответствующие таблицы сложения и умножения. Для P = 2 таблицы представлены ниже.


 









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2019 zdamsam.ru Размещенные материалы защищены законодательством РФ.