[МУЗЫКА] [МУЗЫКА] [МУЗЫКА] Нечисловые данные — это представление литер и графических изображений. Начнем с представления литер. В 1963 году появился стандарт, сначала он был американский, а потом стал международным — ASCII, American Standard Code for Information Interchange. Он был 7-битовым, то есть допускал всего 128 комбинаций литер. Но потом под давлением европейцев и в каком-то смысле и тех, кто использует кириллицу, он расширился до восьми битов, и во второй половине байта, то есть в кодах от 128 до 255 стали применять кодировку латиницы или немецких букв с умляутами (вот эти две точки над буквами), и какие-то есть особые французские буквы и т.д. И появился советский стандарт, назывался КОИ 8. Это полностью ASCII, но с добавлением кириллицы. Когда появилась IBM 360 в 1964 году — ну, IBM не может пользоваться международными стандартами, у них все свое — они ввели свою кодировку, такое не совсем приличное звучание: EBCDIC — Extended Binary Coded Decimal Interchange Code. Вообще-то это изврат, но поскольку IBM в это время раз в 20 была мощнее, чем любая другая IT компания, они могли себе такой изврат позволить. Ввели свою кодировку, совершенно не похожую на ASCII, и на IBM-овских машинах стали пользоваться своей кодировкой, которая практически ничем не отличалась. Ну, другие коды, но принципиально никакого отличия от ASCII не имела. Ну, наши поскольку начали копировать IBM 360 под именем ЕС ЭВМ, сделали советский стандарт ДКОИ 8. Это просто тот же самый EBCDIC, но с добавлением русских литер. Этих 256 кодов не хватало японцам, индусам, таиландцам — очень многим народам, прежде всего китайцам. Поэтому в 91 году был введен стандарт Unicode. Это двухбайтовая кодировка, 16 разрядов, 2¹⁶ — это уже 64 тысячи, довольно много. Но оказалось, что это не совсем эффективно — всегда пользоваться двухбайтовой кодировкой, хотя в большинстве случаев можно воспользоваться ASCII и однобайтовой кодировкой. Поэтому буквально там через год, да, через год появился вариант Unicode, который называется UTF 8. И вот он используется до сих пор, и я его хорошо знаю, и значит, вот когда я делаю трансляторы для русскоговорящей публики, для школьников, я использую кодировку UTF 8. Как это выглядит? Там... Посмотрите, на этом слайде все расписано. Значит, если первый байт имеет старший бит 0, то это просто кодировка ASCII, точно такая же, ничем не отличающаяся. Если в старшем байте — 110 и потом еще пять других битов, то это значит, что код займет два байта. А если 1110, а потом четыре произвольных — три байта и т.д. Всего до шести байтов. То есть в первом байте указывается, сколько байтов составляет одна литера. А все следующие байты, кроме первого, имеют кодировку 10 и потом шесть произвольных литер. Поэтому вот русские буковки — во втором байте. Поэтому я точно знаю, что если мне нужно какую-нибудь русскую букву — Щ или Ъ или Ы — ну любую русскую букву, то мне надо написать два байта, в старшем байте указать 110 и потом какой-то код, а потом во втором байте — 10 и еще шесть. Видите, как? В результате получается, что русские буквы могут быть закодированы 11 битами. 5 в старшем байте и 6 во втором. Этого за глаза и за уши хватает и большим, и маленьким русским буквам кириллицы. Ну не только кириллицы, там много разных. Вот такой шестибайтовый код, его хватает уже и китайцам, и японцам, и всем. Поэтому UTF 8 прижился. Я обращаю ваше внимание еще раз, что на самом деле, и когда мы... Русскоязычные программисты пишут: все равно мы стандартные функции пишем по-английски, кодировка тоже чаще всего совпадает с английской. Так вот тут все очень экономно. Латинские буквы представляются одним байтом, и вполне может быть перемешано: однобайтовые кодики, двухбайтовые кодики, трехбайтовые кодики и т.д. UTF 8 точно прижился. Ну, теперь перейдем к рассмотрению графических данных. Начнем с того, что графические данные бывают двух типов: растровые и векторные. Растровые — вот поглядите на этот слайд — это просто множество точек, там, скажем, 1000х1000, значит, миллион точек. И каждая точка, она называется пиксель, кодируется, если в черно-белом изображении, то одним байтом, а если в цветном, то тремя байтами. Что это такое? Допустим, если черно-белое изображение. Тогда все нули — это значит просто не подсвечивается, ничего нет, в этом месте — черный экран. То есть пустое место. А если все единички, то это яркая черная точка. А все коды между 0 и всеми единичками — это разные уровни серого цвета: светло-серого, темнее, темнее, темнее, пока не станет черным. Цветные пиксели кодируются тремя байтами. Стандарты... Есть несколько стандартов, но я расскажу вам про один, самый распространенный — RGB. Это red, green, blue. То есть из школьного курса физики вы знаете, что любой цвет можно представить в виде комбинации красного, синего и зеленого. Как художники говорят, белый цвет — это не цвет. На самом деле это действительно комбинация всех цветов, всех остальных цветов. И чтобы показать вам конкретно какие-то примеры, поглядите на слайд. Здесь показаны примеры, как кодируется, например, в HTML — это такой язык для рисования экранных форм. FF0000 — это интенсивный красный цвет. 00FF00 — интенсивный зеленый цвет, 0000FF — интенсивный синий цвет. Все нули — черный, все F — белый. То есть вот видите, как раз белый — комбинация всех трех, интенсивных красного, зеленого и синего. Так вот... А все промежуточные цвета — это просто обозначает яркость. То есть FF — это наибольшая яркость цвета. Когда я говорю FF0000 — интенсивный красный, это значит, что красный наибольшей яркости. Если будет первые две шестнадцатеричные цифры не FF, а поменьше, там, AA, например, то будет тоже красный, но не такой яркий. Наконец, что такое векторное изображение? Это вообще очень специфическая вещь, не так часто применяется. Это набор примитивов из элементарных кривых, отрезков кривых, отрезков — там прямые, изогнутые, всякие кривые, которые можно описать математическими формулами. Знаете, где это применяется? Вот есть специальные такие программы, CAD [НЕРАЗБОРЧИВО] среды для построения технических чертежей: как станки рисовать, там, значит, схемы какие-то, электронные схемы. И там действительно очень много окружностей, прямых, отрезков, и вот их можно очень экономно представить в виде, там, код: отрезок длины такой-то, прямой отрезок длины такой-то. И потом экран должен сам это отрисовать, этот отрезок. То есть не все точки. Если у вас, раньше я говорил: 1000х1000, хороший экран такой — это же миллион пикселей. Так вот вам надо иметь миллион, если цветной, миллион трехбайтовых значений. А когда рисуется векторное изображение, вам надо просто короткий код: такой-то отрезок, так-то лежащий, под таким-то углом, начинается там-то, длины такой-то. И оказывается, что это существенно более компактное представление, которое для специфических приложений типа рисования схем очень удобен. А так, в обычной жизни, конечно же, люди применяют растровые изображения, чаще всего в формате RBG для цветных.