shvedka: (Default)
[personal profile] shvedka
... или попытка ликбеза для наших маленьких друзей-гуманитариев.

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

Итак, избавившись от злобных технарей, начнем. Начнем с некого философического размышления. Знаете, почему я думаю, что у вас фобия? Потому что уж одну позиционную систему счисления вы знаете точно. Да-да, это стандартная десятичная система. Она самая что ни на есть позиционная. Позиционная, кстати - это значит, что значение цифры меняется от того, на каком месте (справа) она стоит. То есть в числе 15 пятерка означает "пять", в числе 51 - пятьдесят, а  в числе 5432109 - пять миллионов. Так вот. Все остальные позиционные системы устроены точно так же, как эта. Поэтому не понимать их как-то неловко и именно расширением концепции нам сейчас и придется заняться.

Давайте помучаем еще немного нашу родную десятичную, посмотрим, как она устроена. Вот, например, число 3571. Что оно значит, если разобраться? Три-тысячи пять-сот семь-десят один. 3*1000+5*100+7*10+1. Индеец Зоркий Глаз уже, наверное, заметил повторяющиеся многократно десятки в каждом слагаемом. Давайте еще раз запишем - 3*103+5*102+7*101+1*100. Пока понятно? По идее должно быть. Заметьте, как красиво и единообразно у нас построились десятки, все по порядку. Сначала нулевая степень, первая (мы считаем справа, напоминаю), вторая... ну и сколько нужно.

И в этот момент к нам пришел злой математик и задал неожиданный вопрос... а кто, собственно, решил, что считать нужно именно десятками? Ну какие- то древние гоблины решили, нам-то до них что? А мы вот не хотим десятками, мы хотим восьмерками. Сел и посчитал восьмерками. 3571= 6*83+7*82+6*81+3*80. Сами проверьте, если не верите. Кстати, если вы совсем уж забыли - нулевая степень любого числа равна 1, то есть ее можно бы и не писать, но так единообразнее получается. Ну и кто нам, собственно теперь мешает выписать все жирненькие цифры в ряд? 6763. Никто не помешал :)) Главное, когда мы будем пользоваться, не забыть, что они означают не количество десяток, а количество восьмерок. То есть 6763 мы писать не будем, чтобы не перепутать, а напишем, например (oct)6763.

Главное в этом деле вот что... Не тащить восьмерок из старшего разряда в младший. То есть вот смотрите - есть у нас 6*83+7*82. Ну понятно же, что оно же по совместительству 5*83+15*82. Но нахрена нам, стесняюсь спросить, цифра "15" - большая она и некрасивая. А если так не делать - то получится, что для деления на восьмерки нам понадобится ровно 8 цифр - от 0 до 7. Потому что как только восьмерка в каком-то разряде получилась - мы ее оп - и в следующий разряд. Чувствую, непонятно, да?

Смотрите. Начинаем считать с единицы. 1, 2, 3, 4, 5, 6, 7... восемь, да? А что такое восемь? Это у нас 1*81+0*80 или (oct)10 - напомню, берем только жирные цифры. Что дальше? Девять? 1*81+1*80=(oct)11. 1*81+2*80 =(oct)12- это десять. 1*81+7*80 - это пятнадцать. А шестнадцать - это уже 2*81+0*80. (oct)20. То есть среди жирных цифр нам цифры 8 и 9 уже как-то и не нужны.

А математик наш тем временем не унимался и настроил нам систем с разными основаниями. Основание - это, собсна, то число, которое мы возводим в степень. Десятка в обычном случае, восьмерка - в расписанном выше и любое другое по мере необходимости. Да хоть 37. Только для тридцатисемиричной системы счисления нам понадобится тридцать семь разных цифр, что в практическом приложении неудобно...

Кто же из них более матери истории ценен? И за что мы так любим двоичную систему? Двоичная система, как мы понимаем, это то же самое, только вместо десятки или там восьмерки - двойка. И цифр, соответственно, нужно две. То есть к примеру число 13 у нас в ней будет 1*23+1*22+0*21+1*20 или (bin)1101 - вы проверяйте, не стесняйтесь. Так вот, почему она так популярна, если числа в ней получаются длинные и мерзкие? А вот смотрите. Понятно, что чем больше основание, тем меньше цифр в числе, да? Ну там наше 3571 в десятичной системе записывается 4 цифрами, а в двоичной это, между прочим (bin)110111110011... 12 цифр, а не просто так. Но. Бинарных цифр у нас мало. Ноль да единица. А десятичных - много. То есть в десятичной системе нам надо запасти на каждый разряд по десять цифр, а в двоичной - две всего. Так что на четыре десятичных разряда у нас уйдет 40 цифр, а на 12 двоичных - всего 24. Теперь вам мне на слово придется поверить. Самая экономная в этом плане система - троичная. И изначально именно на ней и пытались строить компьютеры. Но технологически это оказалось сложно. Поэтому троичную систему заменили двоичной. Она чуть-чуть менее экономна, но намного удобнее технологически - дырка-единица, нет дырки-ноль. Кусочек памяти намагнитили-единица, не намагнитили-ноль. Конечно, удобнее... если бы троичная была в сто раз экономнее, придумали бы, конечно, как дырку наполовину пробивать, а так ну ее. Не так много теряем. Так и считают компы в двоичной системе.

А теперь самая интересная и понятная часть всего этого трагического рассказа. Как, хотите вы спросить, все эти числа превращаются в красивые картинки, буковки и все такое, что мы видим на экранах своих компов? Да очень просто на самом деле. Чтобы не вдаваться в сложные технические подробности, упростим задачу до предела. Вот есть у нас некий файл. В нем - цифры. А как мы будем читать эти цифры - мы решаем сами. Вот думаем мы, что это буквы. Отлично. Буквы у нас пронумерованы по порядку - а-1, б-2, в-3... и так далее. Видим единицу - пишем а. Видим двойку - пишем б. Ну и так весь файл. А теперь мы подумали и решили, что это у нас не буквы, а цифры. Напечатали их - и довольны. А теперь еще раз подумали и решили, что это картинка. Отлично, цвета у нас тоже пронумерованы. Видим единицу - ставим красную точку. Видим двойку - ставим зеленую. Видим тройку - ставим синюю. Пошли читать соседнюю цифру. Она же соседняя точка. Ну и так мало-помалу всю картинку нарисовали. Откуда мы знаем, что нам читать - буквы или цифры? А расширение файла нам на что? Переименуйте картинку из jpg  в txt  и откройте блокнотом - такая фигня получится! А кроме расширения, у файла есть еще заголовок - первые сколько-то цифр. Там тоже написано кое-что о том, как его правильно читать. Ну вот комп и разбирается потихоньку... Чай не один год программисты ковырялись для того, чтобы нам на самом деле нифига не надо было знать о цифровом представлении и мы с вами занимались тут фигней исключительно для удовлетворения собственного любопытства.

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

PS по запросам телезрителей - о числовом представлении цвета. Как вы, возможно слышали, в компьютере числа хранятся в виде бит и байт. Бит - это, собственно, цифра в двоичном исчислении, то есть 0 или 1, а байт - это группа из 8 двоичных цифр (добрые технари, идите лесом. В традиционно-банальном случае под байтом подразумевается октет, а всеми остальными случаями мы не будем морочить головы нашим любимым телезрителям). То есть восьмиразрядное число от (bin)00000000 до (bin)11111111 или от 0 до 255 в более традиционной записи. Для простоты и краткости восприятия человеческим мозгом восьмизначные бинарники принято записывать в шестнадцатеричной системе. Четырьмя бинарными цифрами можно записать число от 0 до 15, то есть одну цифру в шестнадцатеричной системе. Восемь бинарных цифр - две шестнадцатеричных. Кстати, все мы в-общем в курсе, что цифр больше 9 индусы нам не придумали, поэтому в качестве остальных цифр используются буквы a, b, c, d, e и f. Таким образом каждый байт можно записать в 16-ричной системе, как двузначное число от 0 (или 00) до FF. Так вот. Базовая модель цвета в компьютере - так называемая RGB - red, green, blue. Дело в том, что монитор умеет светиться именно этими тремя цветами - если вы внимательно и очень близко к нему приглядитесь, вы увидите, что он светится мелкими прямоугольниками (субпикселями)- красный, зеленый, синий, красный, зеленый, синий... на современном мониторе черта с два, конечно, нормально это разглядишь, а на старых хорошо было видно. Собственно, точкой монитора считаются именно ТРИ субпикселя, а цвет точки определяется их яркостью. Вот модель RGB и описывает, с какой яркостью горят все субпиксели. 0 - вообще не горит, максимальное значение - горит на полную яркость. Если все три не горят, точка получается черной, если все три горят - белой. Так вот, в большинстве графических систем каждому субпикселю присваивается 256 возможных градаций яркости - от 0 до 255 или, напомню, от 0 до FF, что то же самое. Поэтому цвет каждого пикселя записывается шестью шестнадцатеричными цифрами - по две на каждый субпиксель. Черный - #000000 (знаком # в данном контексте как раз обозначают 16-ричную систему) - ни один субпиксель не горит. Белый - #FFFFFF - все горят. Зеленый - #00FF00 (красный и синий субпиксели не горят, зеленый горит). И так далее. К примеру, цвет #abcdef - серо-голубой. Почему? Смотрите. Три одинаковых яркости в трех каналах всегда дают серый цвет - ни один цвет не доминирует друг над другом, яркость меняется от черного к белому с увеличением яркости во всех каналах. То есть цвет #ababab - это светло-серый. Вся "красная" яркость у нас уже закончилась. Осталось немножко зеленой (cd>ab) и еще больше синей (ef>cd>ab). При добавлении в серый зеленого и синего мы как раз и получаем пресловутый серо-голубой Для тренировки можете препарировать цвета #ff3333 и #9900ff - или выбрать, какие нравятся :))
From:
Anonymous
OpenID
Identity URL: 
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

Profile

shvedka: (Default)
shvedka

January 2012

S M T W T F S
12 34567
891011121314
15161718192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 23rd, 2017 03:46 am
Powered by Dreamwidth Studios