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

ИСТОКИ СИСТЕМ СЧИСЛЕНИЯ

Алфавит десятичных (арабских) цифр:   0 1 2 3 4 5 6 7 8 9
Алфавит двоичных цифр:  0 1
Алфавит восьмеричных цифр: 0 1 2 3 4 5 6 7
Алфавит шестнадцатиричных цифр: 0 1 2 3 4 5 6 7 8 9 A B C D E F

Английский (латинский) алфавит:

Aa

Jj

Ss

Bb

Kk

Tt

Cc

Ll

Uu

Dd

Mm

Vv

Ee

Nn

Ww

Ff

Oo

Xx

Gg

Pp

Yy

Hh

Qq

Zz

Ii

Rr

 

КОМПЬЮТЕРУ никак не объяснишь десятичную систему счисления. Компьютер как электрическая машина понимает только одно - колебания электрического тока (в объяснении которого человечество пока остановилось на той версии, что электрический ток есть направленный поток электронов, в чём я лично сомневаюсь, ибо представлять неведомое нам движение неких субстанций - электронов, движущихся, как говорят, по орбитам вокруг ядер атомов, по аналогии с потоком автомобилей на дороге, думаю, неправильно. Да и по орбитам они скорее всего вокруг ядер не летают в нашем понимании полёта. Никто и ничего там не движется в нашем понимании движения. Там скорее всего работают некие поля, свойств которых мы ещё не знаем).

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

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

ВО-ПЕРВЫХ,  люди  испокон веков не чурались самого принципа кодирования информации и использовали для кодирования оной на первых порах вообще всё, что находили под рукой, всякие зарубки, заметки, узелки на память и тому подобное (так называемая единичная система счисления). То есть вот завязали узелок на платочке вне связи с каким бы то ни было материальным или логическим предметом и стали помнить, что вот этот узелок есть напоминание о том, что надо бы посетить с ответным визитом соседнюю пещеру на другом склоне горы.

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

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

В-ТРЕТЬИХ, человечество к моменту появления компьютеров уже разработало и оформило сам принцип двоичного счёта (на предмет использования его для кодировки информации для передачи последней на расстояние) как манипулирование двумя разными физическими либо логическими штуками и составление из них таблиц кодов – от флагов морских сигнальщиков через семафорную азбуку и до азбуки Морзе, использующей разность длин  электрических разрядов, когда относительно долгое нажатие на некий электрический тумблер и соответственно относительно долгий (длинный) электрический сигнал в элетрической цепи заставлял печатающее устройство на другом конце передачи проводить линию и был принят за тире, а относительно быстрое нажатие на тумблер и относительно недолгий, короткий сигнал током в электрической цепи заставлял печатающее устройство на другом конце передачи печатать точку.

Из точек и тире была составлена азбука, разным комбинациям точек-тире были поставлены в соответствие различные буквы алфавита (в принципе, неважно, какого, хотя, конечно же, на первых порах латинского, англоязычного). Возникла знаменитая морзянка. Один из вариантов её, который когда-то где-то попался мне на просторах интернета, такой: · - A| -  · · · B| -  · - · C| -  · · D| · E| · · - · F| -  - · G| · · · · H| · · I| · - - - J| -  · - K| · - · · L| -  - M| -   · N| - - - O| · - - · P| -  - · - Q| · - · R| · · · C| - T| · · - U| · · · - V| · - - W| -  · · - X| -  · - - Y| -  - · · Z

Изобрели морзянку англосаксы. Они же изобрели компьютеры, мышку, Windows,  Интернет, языки программирования, электронную почту, аську, файловые менеджеры, самораспаковывающиеся архивы, меню, WWW, винамп, ворд, эксель, браузеры, антивирусы, ноутбуки, и прочие харды с софтами. Английский язык стал главным в мире компьютеров, как в своё время (во времена Льва Толстого и Фёдора Достоевского) русский язык был главным в мире литературы.

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

КРОМЕ двоичной системы, в ходу раньше была ещё пятеричная система (счёт пяткАми, пятёрками), имеющая в своей основе тот факт, что у человека пять пальцев на руке, и от неё уже недалеко до десятичной системы, поскольку на обеих руках 10 пальцев.

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

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

 От Древнего Вавилона до нас дошла 60-ричная система (60 минут в часе, 60 секунд в минуте). Почему вавилоняне облюбовали число 60 – я без понятия. Одно из объяснений, которое я нашёл в интернете – число 60 имеет много целых делителей (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60), то есть как хорошая разменная монета делится легко на всё, что было в ходу у других.

Такое впечатление, что 60-тиричка присутствует и в лунных китайском и японском двенадцатиричных календарях, так как в этих календарях двенадцатилетние циклы через пять оборотов складываются в большой шестидесятилетний цикл, меняющий цвет привлечённых животных (крысы, быка, тигра, кота, дракона, змеи, лошади, козы, обезьяны, петуха, собаки, свиньи – в таком порядке и именно эти животные пришли попрощаться к Будде, когда он покидал Землю и погружался в Нирванну). Например, каждые 60 лет простая Лошадь становится Огненной Лошадью. Смена цвета животных связана со сменой стихий (дерево – сине-зелёный, огонь – красный, земля – жёлтый, металл – белый, вода – чёрный).

Существовала также 20-ричная система (у человека 20 пальцев на руках и ногах).

Затем до нас дошла путаная римская система записи счёта (видимо, проистекающая из 12-ричной системы), первые двенадцать цифр I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, и для составления числа также ещё несколько букв-чисел: L (=10), C (=100), D (=500), M (=1000). Сейчас используется в основном для записи торжественных дат.

Некоторые энтузиасты пытались приучить нас к троичной системе счёта, призванной быть основой троичных компьютеров. Наиболее внятное объяснение троичной системы я нашёл на каком-то форуме в инете: суть в том, чтобы добавить некую третью ячейку («не знаю») состояния обработки компьютером данных, которая позволит хранить вероятность выпадения (то есть наступления) события (0-100%), буде возникнет спорная ситуация при обсчёте этого события. Тогда действие не зацикливается, а состояние результата скидывается в состояние «не знаю». Был построен даже компьютер «Сетунь», созданный русским исследователем, построенный как раз на этих принципах.

Существует троичная система счёта в двух вариантах: несимметричная (цифры 0, 1, 2) и симметричная (цифры -1, 0, 1).

Но похоже, это всё же тупиковая ветка развития компьютерной мысли. Троичная система – та же двоичная, но с добавлением лишней цифры, призванной обозначать то самое состояние «не знаю» и сделать ненужным внешний знак минус (отрицательные числа кодируются  теми же цифрами).

Существуют и совсем уж экзотические системы счисления. Факториальная например. Или например, на основе числа «e» (2,71828047), которое есть основание натурального логарифма. Смысл появления числа «e» заключается в следующем:

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

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

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

2. Однако возникает проблема пробелов (провалов, пустот) между числами, для которых находятся их логарифмы, с удалением величины основания от 1. Например, последовательные степени основания 2 дают числа 2 ^ 0 = 1, 2 ^ 1 = 2, 2 ^ 2 = 4, 2 ^ 3 = 8, 2 ^ 4 = 16, 2 ^ 5 = 32, и т.д. Заменяются представителями (логарифмами) таким образом только числа 1, 2, 4, 8, 16, 32…В любом случае не все. А параметры стрельбы из пушки могут попадать и на другие числа.

Чтобы практически у каждого числа (в разумных практически применяемых пределах) был его представитель (показатель степени, логарифм), нужно очевидно взять за основание логарифма число возможно более приближенное к 1, например 1,00001 (одна и одна стотысячная) или даже 1,000001 (одна и одна миллионная), а еще лучше 1,000000001 (одна и одна миллиардная). Если основание логарифма будет стремиться к единице, тогда у каждого числа будет его представитель (показатель степени, он же логарифм).

3. Однако при основании, очень близком к единице возникает другой перекос: для небольших чисел получаются огромные логарифмы (например число 3 по основанию 1,00001 имеет логарифм 109861). Артиллеристу пришлось бы хоть и складывать/вычитать, но всё равно огромные числа. Чтобы этот логарифм был бы величиной сопоставимой с самим числом 3, его (логарифм) следовало бы в данном случае уменьшить в 100 000 раз, тогда логарифм числа 3 был бы 1,09861, однако не по основанию 1,00001 разумеется, а по некоему другому основанию.

Видим, что:

 3 = (1,00001) ^ 109861 = 1,00001100 000 * 1,09861 = (1,00001100 000) ^ 1,09861= 2,718267631,09861                     

Это другое основание вычисляется по формуле: возможно более приближенное к единице основание надо возвести в степень этого приближения, равную дробной части этого приближения, то есть  например 1,00001 (одна и одна стотысячная) в степени 100 000 (сто тысяч),т.е. 1,00001100 000,  или если 1,000001 (одна и одна миллионная), то в степени один миллион, т.е. 1,0000011 000 000, что составляет в обоих случаях (и составит во всех других подобных случаях) величину 2,71826763. Это и есть число «е».

4. Число «е» таким образом есть предел (1 + 1/n ) ^ n, к которому стремится неограниченно приближающееся к единице основание (при n стремящемся к бесконечности), возводимое в степень этого приближения к единице в целях сделать не очень большие (разумной практической величины) числа и их заменители (логарифмы) относительно соразмерными величинами.

Число «е» есть некий устойчивый компромисс между числами и их заменителями, представителями (степенями, то есть логарифмами). Хотя более корректно надо сказать не степенями, а показателями степеней, ибо степень состоит из двух ингредиентов – основания степени и показателя степени. Основание степени, возведённое в указанное в показателе степени число, есть наконец искомая степень.

Этот компромисс (число «е») вполне устраивает людей в их практических задачах по вычислению чего-либо, и одновременно не противоречит законам математики.

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

Для практических применений наиболее удобны десятичные логарифмы, но для теоретических исследований наиболее пригодны именно натуральные логарифмы. Причём необычность и право на существование числа «е» проявляется и графически.

Если построить в декартовой (прямоугольной) системе координат график показательной функции y = e ^ x, то есть y = (2,71826763) ^ x, то он будет представлять собой дугу, восходящую из II четверти в I, которая пересечёт ось ординат в точке (0; 1) и касательная, проведённая через эту точку графика с внешней выпуклой стороны дуги (снизу графика, со стороны оси абсцисс), составит с осью абсцисс угол пи / 4 (45 градусов). Всё подозрительно гладко и подходит одно к другому.

Так что в этом числе «е» определённо что-то есть.

ДВОИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ

Применительно к компьютеру относительно малое напряжение электрического тока (1,5-2,5 вольта) было принято за 0, а относительно большое напряжение (3-5 вольт) было принято за 1. Символы нового двоичного алфавита назвали битами. Возник язык битов, в котором 0 и 1 составляют двоичный разряд. Появилась двоичная система счисления для компьютеров.

Таким образом, система счёта в компьютере основана на числе 2 и на степенях двойки. Поэтому в двоичной системе свои понятия о круглости чисел. Если в десятичной системе круглым будет число 1000, то в двоичной оно вовсе не круглое, а крулым будет число 1024 (то есть 210).

Из разных последовательностей нулей и единиц можно создать много различных вариантов их комбинаций. Однако чисто двух цифр мало для перевода на машинный язык событий и явлений реальной жизни. Из двух цифр (0 и 1) можно составить всего четыре комбинации: 00, 01, 11, 10. Этого мало. В одном лишь русском алфавите 33 буквы. Плюс к этому десять цифр десятичной системы счисления, которой пользуется человек, буквы латинского алфавита, и другие необходимые символы.

И поэтому первым делом (для расширения ёмкости и удобства счёта) в новой системе счёта 8 бит объединили в 1 байт, который может предоставить 256 различных вариантов расположения нулей и единиц, включая варианты из одних нулей 0000 0000 (соответствует числу 0 в десятичной системе) и из одних единиц 1111 1111 (соответcтвует числу 255 в десятичной системе).

Заполнение двоичного числа единицами идёт справа налево начиная с самого младшего (правого) разряда. Сдвигается единица вправо на разряд (на шаг) только когда сзади неё (правее) больше не останется нулей, и все нули будут замещены единицами. Тогда происходит сдвиг самой левой единицы на шаг влево, а все пространство позади неё (справа) полностью обнуляется. То есть как бы накопление единиц и вытеснение всех нулей заставляет сплошной массив единиц расширяться влево (на более старший разряд), но этот шаг приводит к немедленному обнулению пространства справа от сдвинувшейся влево единицы. А затем снова в самом младшем разряде (на самом правом крайнем месте вереницы) появляется очередная единица и всё пространство справа от самой старшей (левой) единицы опять начинает заполняться единицами.

На письме это выглядит как всё удлиняющаяся влево сплошная вереница нулей и единиц, и для большей читабельности эту вереницу дробят, делят на куски по 3 знака (триада, ставшая основой восьмеричной системы), по 4 знака (тетрада, полубайт, ставшая основой шестнадцатиричной системы), по 8 знаков (байт), добавляют для симметрии вида ведущие незначащие нули в самые левые (старшеразрядные) триады, тетрады и байты. Например, начало отсчёта в разрезе тетрады : 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111 (два разных знака 0 и 1 могут дать в границах тетрады 16 возможных разных комбинаций). Или например начнём счёт не тетрадами, а триадами: 000, 001, 010, 011, 100, 101, 110, 111 (итого восемь возможных комбинаций в границах одной триады).

Соответственно самой первой комбинации в самой правой (самой младшей) тетраде (или триаде, или двуаде, если есть такое слово, или просто одной двоичной цифре 0) поставлено в соответствие десятичное число 0, второй комбинации в тетраде (0001) или просто двоичному числу 1 поставлено в соответствие (волевым решением человечества) десятичное число 1, третьей комбинации 0010 или двоичному числу 10 (без ведущих нулей) поставлено в соответствие десятичное число 2, четвёртой комбинации в тетраде 0011 или просто одинокому двоичному числу 11 поставлено в соответствие десятичное число 3, пятой комбинации в тетраде 0100 или одинокому двоичному числу 100 поставлено в соответствие десятичное число 4. И так далее.

Число 1111 это десятичное число 15. А вот число 0001 0000 (или 10000) – это десятичное число 16. Далее с самого правого края вновь появляется в двоичном числе единица (0001 0001 или короче 10001), и это уже десятичное число 17.

Двоичная система, как и десятичная (как и восьмеричная, как и шестнадцатиричная) суть позиционная система счисления: от позиции цифры зависит её старшинство (разряд), чем левее, тем старшинство выше, разряд больше.

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

Достаточно большие числа дают длинные цепочки двоичных цифр, например десятичное число 2 147 483 647 (число Long, длинное целое, 2^31 – 1) в двоичном виде выглядит так (с ведущим нулём в самом старшем разряде самой левой тетрады для симметрии всей записи): 0111 1111 1111 1111 1111 1111 1111 1111.

Префикса перед двоичными цифрами в двоичном числе, чтобы двоичное число заведомо на глаз отличалось от десятичного, почему-то не предусмотрено. Для десятичных чисел я встречал префикс &#.

16-ТИРИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ

Итак, чтобы передать компьютеру некую информацию на единственно доступном ему для понимания языке (колебания, изменения электрического тока), очевидно, надо создать некую систему счисления, приспособленную к этому моменту. И такая система в виде двоичной системы счисления была создана. Алфавитом её стали две двоичные цифры 0 и 1, могущие в рамках самих себя дать четыре разных комбинации 00, 01, 10, 11. Этого безусловно мало.

Поэтому для увеличения, так сказать, пропускной способности двоичной системы счёта двоичные цифры объединили в 1 байт, насчитывающий уже восемь двоичных знаков и могущие дать 256 разных комбинаций (2 в степени 8) от 00000000 до 11111111 (или в более читабельном виде с разбивкой на полубайты 0000 0000 и 1111 1111).

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

Поэтому дальше (опять для удобства счёта и более короткой записи) была придумана 16-тиричная система счисления, когда число в двоичной системе разбивается на тетрады (справа налево - по четыре двоичных знака в каждой тетраде). Каждая тетрада даёт 2 в четвертой степени = 16 комбинаций. Эти 16 комбинаций и есть основа шестнадцатиричной системы счёта.

 Пока вся тетрада не начнёт состоять из одних единиц, произойдёт 16 раз изменение её внешнего вида (значения), нули и единицы 16 раз расположатся в тетраде по другому. И вот каждой из этих шестнадцати вариаций (комбинаций нулей и единиц) ставится в соответствие последовательно одна цифра шестнадцатиричного алфавита 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Имеем в первой тетраде (самой правой, самой младшей; одна тетрада – это 4 знака, полубайт) такие последовательные комбинации двоичных чисел: 0000 ( поставлено в соответствие шестнадцатиричное число 0), 0001 (1), 0010 (2), 0011 (3), 0100 (4), 0101 (5), 0110 (6), 0111 (7), 1000 (8), 1001 (9), 1010 (A), 1011 (B), 1100 (С), 1101 (D), 1110 (E), 1111 (F).

Для отличия шестнадцатиричного числа от двоичного, перед первым придумали ставить префикс &H (от слова hexadecimal, шестнадцатиричный). Так что более корректно предыдущую запись следует записать так: 0000 ( поставлено в соответствие шестнадцатиричное число 0, перед нулём префикс не ставится, как я заметил), 0001 (&H1), 0010 (&H2), 0011 (&H3), 0100 (&H4), 0101 (&H5), 0110 (&H6), 0111 (&H7), 1000 (&H8), 1001 (&H9), 1010 (&HA), 1011 (&HB), 1100 (&HС), 1101 (&HD), 1110 (&HE), 1111 (&HF).

 

ВОСЬМЕРИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ

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

Таким образом, двоичное 000 это восьмеричное 0, двоичное 001 это восьмеричное 1, двоичное 010 это восьмеричное 2, двоичное 011 это восьмеричное 3, двоичное 100 это восьмеричное 4, двоичное 101 это восьмеричное 5, двоичное 110 это восьмеричное 6, и наконец двоичное 111 это восьмеричное 7. Или короче 0 ~ 0, 1 ~ 1, 10 ~ 2, 11 ~ 3, 100 ~ 4, 101 ~ 5, 110 ~ 6, 111 ~ 7 (тильда здесь потому, что присутствует вовсе не равенство одного другому, а именно соответствие, назначенное таковым волевым решением человечества).

Чтобы отличать восьмеричные числа от десятичных, в восьмеричных впереди ставится префикс &O (от слова octuple, восьмеричный), так что ещё более корректная запись:  0 ~ 0 (перед нулём префиксы не ставят, как я заметил. Ноль он и есть ноль), 1 ~ &O1, 10 ~ &O2, 11 ~ &O3, 100 ~ &O4, 101 ~ &O5, 110 ~ &O6, 111 ~ &O7

 

ПЕРЕХОД ОТ ДВОИЧНОЙ СИСТЕМЫ К ШЕСТНАДЦАТИРИЧНОЙ

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

Например, имеем двоичное число 0011 1010 1100 (это десятичное число 940). Справа налево заменяем тетрады соответствующими шестнадцатиричными цифрами, имеем: 0011 заменяем на 3, 1100 на A, 1100 на C, получаем шестнадцатиричное число 3AC (полное написание &H3AC).

ТАКИМ ОБРАЗОМ, шестнадцатиричная система счисления — позиционная система счисления (разряд, старшинство цифры связано с её расположением в совокупном числе). Старшинство идёт справа налево (как и в десятичной и двоичной системах) и справа налево же каждая шестнадцатиричная цифра соответствует очередной по старшинству тетраде в равном по значению двоичном числе (тетрады, повторю, тоже чем левее, тем старше).

ШЕСТНАДЦАТИРИЧНАЯ система счёта широко используется в низкоуровневом программировании и вообще в компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт (две тетрады), значения которого удобно записывать двумя шестнадцатиричными цифрами (каждая цифра соответствует своей тетраде, например FF это 1111 1111). В стандарте Юникода номер символа принято записывать в шестнадцатиричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями). В языке программирования Visual Basic шестнадцатиричными числами записываются коды цвета (например &H8000000F&, это десятичное число 2147483663).    

 СПОСОБЫ ЗАПИСИ: в математике систему счисления принято писать в подстрочном знаке. Например, десятичное число 1443 можно записать как 144310 или как 5A316 или как 101101000112 или как 26438.

В РАЗНЫХ ЯЗЫКАХ программирования для записи шестнадцатиричных чисел используют различный синтаксис. В Ада и VHDL такие числа указывают так: 16#5A3#. В Си и языках схожего синтаксиса, например, в Java, используют префикс 0x. Например, 0x5A3. В некоторых ассемблерах используют букву h, которую ставят после числа. Например, 5A3h. При этом, если число начинается не с десятичной цифры, впереди ставится 0 (ноль): 0FFh (25510). Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бэйсика используют префикс $. Например, $5A3. Некоторые иные платформы, например ZX Spectrum в своих ассемблерах (MASM, TASM, ALASM, GENS и т.д.) использовали запись #5A3, обычно выровненную до одного или двух байт: #05A3. Другие версии Бэйсика используют для указания шестнадцатеричных цифр сочетание &h (в частности Visual Basic). Например, &h5A3. В Unix-подобных операционных системах (и многих языках программирования, имеющих корни в Unix/linux) непечатные символы при выводе/вводе кодируются как \xCC, где CC - шестнадцатиричный код символа

ТАКИМ ОБРАЗОМ, шестнадцатиричная система выросла из двоичной вследствие усилий по упрощению работы с длинными двоичными числами. Для перевода многозначного двоичного числа в шестнадцатиричную форму нужно, как мы видели, разбить это двоичное число на тетрады и справа налево заменить каждую тетраду двоичного числа соответствующей ей шестнадцатиричной цифрой. Разрядности цифр (старшинство) при этом совпадают в обеих системах.

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

 

ПЕРЕВОД ИЗ ДЕСЯТИЧНОЙ В ДРУГИЕ СИСТЕМЫ СЧИСЛЕНИЯ

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

Конкретно, например, для перевода десятичного числа в двоичное нужно десятичное число делить на 2 до получения минимального остатка. При делении десятичного числа на 2 образуются остатки, равные 0 или 1. Первый остаток будет самым младшим разрядом (крайний справа). Последний остаток будет предпоследним разрядом перед самым старшим разрядом. А самым старшим разрядом (крайний слева) будет результат деления последнего оставшегося от последовательного деления на 2 числа и он всегда равен 1.

Например, переведём десятичное число 21 в двоичный код: 21/2=10 остаток 1; 10/2=5 остаток 0; 5/2=2 остаток 1; 2/2=1 остаток 0. Последнее число 2/2=1. Эта единица идёт в старший разряд. В следующий разряд (предстарший) идет остаток от этого деления (0) и т. д. до последнего разряда (которым будет самый первый остаток от самой первой строчки деления). Итак, самый старший разряд 1, далее предстарший разряд 0, затем 1, 0, 1, итого 10101.

Переведём то же десятичное число 21 в восьмеричный вид: 21:8=2 остаток 5, этот остаток есть самый  младший разряд, а самым старшим разрядом будет цифра 2, к ней и конкатенируем (приклеиваем) цифру 5, итого &O25.

Переведём то же десятичное число 21 в шестнадцатиричный вид: 21:16=1 остаток 5 (это самый младший разряд), 1 на 16 уже не делим, поэтому в самом старшем разряде и будет это число 1, к нему справа механически прицепливаем остаток 5, итого &H15.

ИТАК, для перевода из десятичных в двоичные, восьмеричные и шестнадцатиричные надо десятичные делить на 2 или  на 8 или на 16 до получения числа после деления, меньшего чем соответственно 2, 8, 16. А после каждой строчки деления будут оставаться остатки, от первой строчки деления – самый младший разряд, от последней строчки деления – предстарший разряд (сразу справа от старшего), а самым старшим разрядом будет то самое последнее число после деления, которое меньше 2, 8 или 16.

 

ПЕРЕВОД ИЗ ДРУГИХ СИСТЕМ В ДЕСЯТИЧНУЮ СИСТЕМУ СЧИСЛЕНИЯ

Общий принцип перевода:

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

РЕМАРКА. Двоичные цифры, восьмеричные цифры и первые десять шестнадцатиричных цифр фактически суть те же десятичные цифры, и казалось бы, тавтология и ерунда, менять то же самое на то же самое. Однако здесь зарыт большой смысл. Пусть вы будете писать то же самое, однако логически это абсолютно другое. Написание цифры одинаковое, а сущность принципиально разная. И если не держать в голове механическую замену НЕдесятичных цифр десятичными (а лучше проделывать это в действительности),  то очень легко запутаться дальше в переводе, когда наступит очередь степеней старшинства разрядов.

2) каждую теперь уже десятичную цифру умножаем на 2 (если переводим из двоичной), на 8 (если из восьмеричной) и на 16 (если из шестнадцатиричной) в степени старшинства разряда, занимаемого этой конкретной цифрой. Самый правый разряд имеет степень старшинства 0, на шаг левее – степень старшинства 1, еще на шаг левее – степень старшинства 2, еще на шаг левее – степень старшинства 3 и так далее. Максимальная степень старшинства = количество значащих цифр – 1.

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

Итак, пример. Вернёмся обратно от двоичного числа 10101 к десятичному числу 21. Первое, механически заменяем двоичные цифры на десятичные (фактически они совпадают): 1 0 1 0 1; второе и третье, умножаем каждую цифру на 2 в степени старшинства разряда, занимаемого этой цифрой и складываем все произведения: 1х24+ 0х23 + 1х22 + 0х21 + 1х20 = 16+4+1 = 21.

Переведём восьмеричное число &O25 в десятичное (должно получиться 21): 1) 2 5 2)2х81 + 5х80 = 16 + 5 = 21

            Переведём шестнадцатиричное число &H15 в десятичное (должно получиться 21): 1)1 5 2) 1х161 + 5х160 = 16 + 5 = 21

Переведём ещё шестнадцатиричное число &H8000000F& в десятичный вид (должно получиться десятичное число 2147483663): 1) механически заменяем шестнадцатиричные цифры на десятичные 8 0 0 0 0 0 0 15; 2) умножаем каждую десятичную цифру на 16 в степени старшинства разряда и складываем все полученные произведения: 8х167 + 0х166 + 0х165 + 0х164 + 0х163 + 0х162 + 0х161 + 15х160 = 2147483648+15 = 2147483663.

ИТАК, чтобы перевести двоичное (восьмеричное, шестнадцатиричное) число в десятичное, надо механически заменить в двоичном (восьмеричном, шестнадцатиричном) числе все двоичные (восьмеричные, шестнадцатиричные) цифры на соответствующие им десятичные цифры и затем каждую десятичную цифру по старшинству умножить на 2, 8, 16 в степени старшинства разряда, занимаемого этой теперь уже десятичной цифрой.

Самый крайний правый разряд имеет степень старшинства 0 (единицы), второй справа 1 (десятки), третий справа 2 (сотни) и т.д.

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

 Например, шестнадцатиричное число &H5A3 = 5·162 + 10·161 + 3·160 = 5·256 + 10·16 + 3·1 = 1280 + 160 + 3 = 1443. То есть в шестнадцатиричном числе 5A3 заменяем в крайнем справа нулевом низшем разряде (шестнадцатиричные единицы) шестнадцатиричную 3 на десятичную 3, во втором разряде (среднем, первый, шестнадцатиричные десятки) шестнадцатиричное А заменяем на десятичное 10, в третьем разряде, высшем (крайний слева, второй, шестнадцатиричные сотни) заменяем шестнадцатиричное 5 на десятичное 5, получается механически заменённая запись 5 10 3, затем каждый разряд умножаем на 16 в степени старшинства этого разряда (лучше справа налево, чтоб не путаться) и складываем все полученные произведения

Шестнадцатиричный вид числа красивее десятичного и короче двоичного (значит легче запоминается). Вот например число Long (2 ^ 31 – 1, так называемое длинное целое) в разном представлении:

в десятичном виде 2147483647

 в двоичном виде 1111111111111111111111111111111, или в более читабельном виде с разбивкой по тетрадам и с ведущим нулём в самой старшей тетраде 0111 1111 1111 1111 1111 1111 1111 1111)

в шестнадцатиричном виде &H7FFFFFFF

 

ПЕРЕВОД ИЗ ДВОИЧНОЙ В ВОСЬМЕРИЧНУЮ И ШЕСТНАДЦАТИРИЧНУЮ

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

То есть здесь особо думать нечего, просто надо подзапомнить, что в случае трёхзначия, триад (которые дают восемь возможных комбинаций расположения двоичных цифр и являются основой восьмеричной системы), корреляция (соответствие) следующая: 000 ~ 0; 001 ~ &O1; 010 ~ &O2; 011 ~ &O3; 100 ~ &O4; 101 ~ &O5; 110 ~ &O6; 111 ~ &O7, а в случае четырёхзначия, тетрад, полубайта (которые дают шестнадцать возможных комбинаций расположения двоичных цифр и являются основой шестнадцатиричной системы) корреляция такая: 0000 ~ 0; 0001 ~ &H1; 0010 ~ &H2; 0011 ~ &H3; 0100 ~ &H4; 0101 ~ &H5; 0110 ~ &H6; 0111 ~ &H7; 1000 ~ &H8; 1001 ~ &H9; 1010 ~ &HA; 1011 ~ &HB; 1100 ~ &HC; 1101 ~ &HD; 1110 ~ &HE; 1111 ~ &HF.

 

ПЕРЕВОД ИЗ ВОСЬМЕРИЧНОЙ И ШЕСТНАДЦАТИРИЧНОЙ В ДВОИЧНУЮ

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

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

Кому надо - поймёт.

 

ПЕРЕВОД ИЗ ВОСЬМЕРИЧНОЙ В ШЕСТНАДЦАТИРИЧНУЮ И ИЗ ШЕСТНАДЦАТИРИЧНОЙ В ВОСЬМЕРИЧНУЮ

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

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

Именно такой алгоритм перевода использован в форме Системы Счисления приложения Калькулятор.

 

ОБЩИЙ ВЫВОД

1) Из десятичной в недесятичные (10 > 2, 10 > 8, 10 >16) переводится делением на основание системы, в которую переводят. Из десятичной системы в двоичную, восьмеричную и шестнадцатиричную числа переводятся последовательным делением десятичного числа на соответственно 2, 8, 16. В результате делений исходное десятичное число последовательно уменьшается в 2, 8, 16 раз и выдаётся остаток от деления.

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

2) Из недесятичных в десятичную (2 > 10, 8 > 10, 16 > 10) переводится умножением на основание системы, в которую переводят, в степени старшинства разряда, занимаемого цифрой-сомножителем.

Из двоичных, восьмеричных, шестнадцатиричных чисел в десятичные переводятся суммированием последовательных произведений механически заменённых десятичных цифр на числа 2, 8 или 16 (в зависимости из какой системы переводим) в степени старшинства разряда, занимаемого механически заменённой десятичной цифрой (степень чисел 2, 8 или 18 определяется позицией десятичной цифры).

3) Из производных двоичной в чистую двоичную (8 > 2, 16 > 2) и наоборот, из чистой двоичной в производные двоичной (2 > 8, 2 > 16)  переводится соответствием внешнего вида триады (тетрады) и назначенной (волевым решением человечества) конкретному внешнему виду  триады (тетрады) восьмеричной (шестнадцатиричной) цифры.

4) Из производных двоичной в производные двоичной (8 > 16, 16 > 8) переводится через переформатирование их общей двоичной основы путём ликвидации деления на триады либо тетрады и новым заново делением на тетрады либо триады, а затем применяя вышеописанный метод соответствия.

Всего делов-то.

Ниже приводятся первые 256 позиций (байт) соответствия значений разных систем счисления друг другу:

2

8

10

16

0000 0000

0

0

0

0000 0001

&O1

&#1

&H1

0000 0010

&O2

&#2

&H2

0000 0011

&O3

&#3

&H3

0000 0100

&O4

&#4

&H4

0000 0101

&O5

&#5

&H5

0000 0110

&O6

&#6

&H6

0000 0111

&O7

&#7

&H7

0000 1000

&O10

&#8

&H8

0000 1001

&O11

&#9

&H9

0000 1010

&O12

&#10

&HA

0000 1011

&O13

&#11

&HB

0000 1100

&O14

&#12

&HC

0000 1101

&O15

&#13

&HD

0000 1110

&O16

&#14

&HE

0000 1111

&O17

&#15

&HF

0001 0000

&O20

&#16

&H10

0001 0001

&O21

&#17

&H11

0001 0010

&O22

&#18

&H12

0001 0011

&O23

&#19

&H13

0001 0100

&O24

&#20

&H14

0001 0101

&O25

&#21

&H15

0001 0110

&O26

&#22

&H16

0001 0111

&O27

&#23

&H17

0001 1000

&O30

&#24

&H18

0001 1001

&O31

&#25

&H19

0001 1010

&O32

&#26

&H1A

0001 1011

&O33

&#27

&H1B

0001 1100

&O34

&#28

&H1C

0001 1101

&O35

&#29

&H1D

0001 1110

&O36

&#30

&H1E

0001 1111

&O37

&#31

&H1F

0010 0000

&O40

&#32

&H20

0010 0001

&O41

&#33

&H21

0010 0010

&O42

&#34

&H22

0010 0011

&O43

&#35

&H23

0010 0100

&O44

&#36

&H24

0010 0101

&O45

&#37

&H25

0010 0110

&O46

&#38

&H26

0010 0111

&O47

&#39

&H27

0010 1000

&O50

&#40

&H28

0010 1001

&O51

&#41

&H29

0010 1010

&O52

&#42

&H2A

0010 1011

&O53

&#43

&H2B

0010 1100

&O54

&#44

&H2C

0010 1101

&O55

&#45

&H2D

0010 1110

&O56

&#46

&H2E

0010 1111

&O57

&#47

&H2F

0011 0000

&O60

&#48

&H30

0011 0001

&O61

&#49

&H31

0011 0010

&O62

&#50

&H32

0011 0011

&O63

&#51

&H33

0011 0100

&O64

&#52

&H34

0011 0101

&O65

&#53

&H35

0011 0110

&O66

&#54

&H36

0011 0111

&O67

&#55

&H37

0011 1000

&O70

&#56

&H38

0011 1001

&O71

&#57

&H39

0011 1010

&O72

&#58

&H3A

0011 1011

&O73

&#59

&H3B

0011 1100

&O74

&#60

&H3C

0011 11 01

&O75

&#61

&H3D

0011 1110

&O76

&#62

&H3E

0011 1111

&O77

&#63

&H3F

0100 0000

&O100

&#64

&H40

0100 0001

&O101

&#65

&H41

0100 0010

&O102

&#66

&H42

0100 0011

&O103

&#67

&H43

0100 0100

&O104

&#68

&H44

0100 0101

&O105

&#69

&H45

0100 0110

&O106

&#70

&H46

0100 0111

&O107

&#71

&H47

0100 1000

&O110

&#72

&H48

0100 1001

&O111

&#73

&H49

0100 1010

&O112

&#74

&H4A

0100 1011

&O113

&#75

&H4B

0100 1100

&O114

&#76

&H4C

0100 1101

&O115

&#77

&H4D

0100 1110

&O116

&#78

&H4E

0100 1111

&O117

&#79

&H4F

0101 0000

&O120

&#80

&H50

0101 0001

&O121

&#81

&H51

0101 0010

&O122

&#82

&H52

0101 0011

&O123

&#83

&H53

0101 0100

&O124

&#84

&H54

0101 0101

&O125

&#85

&H55

0101 0110

&O126

&#86

&H56

0101 0111

&O127

&#87

&H57

0101 1000

&O130

&#88

&H58

0101 1001

&O131

&#89

&H59

0101 1010

&O132

&#90

&H5A

0101 1011

&O133

&#91

&H5B

0101 1100

&O134

&#92

&H5C

0101 1101

&O135

&#93

&H5D

0101 1110

&O136

&#94

&H5E

0101 1111

&O137

&#95

&H5F

0110 0000

&O140

&#96

&H60

0110 0001

&O141

&#97

&H61

0110 0010

&O142

&#98

&H62

0110 0011

&O143

&#99

&H63

0110 0100

&O144

&#100

&H64

0110 0101

&O145

&#101

&H65

0110 0110

&O 146

&#102

&H66

0110 0111

&O147

&#103

&H67

0110 1000

&O150

&#104

&H68

0110 1001

&O151

&#105

&H69

0110 1010

&O152

&#106

&H6A

0110 1011

&O153

&#107

&H6B

0110 1100

&O154

&#108

&H6C

0110 1101

&O155

&#109

&H6D

0110 1110

&O156

&#110

&H6E

0110 1111

&O157

&#111

&H6F

0111 0000

&O160

&#112

&H70

0111 0001

&O161

&#113

&H71

0111 0010

&O162

&#114

&H72

0111 0011

&O163

&#115

&H73

0111 0100

&O164

&#116

&H74

0111 0101

&O165

&#117

&H75

0111 0110

&O166

&#118

&H76

0111 0111

&O167

&#119

&H77

0111 1000

&O170

&#120

&H78

0111 1001

&O171

&#121

&H79

0111 1010

&O172

&#122

&H7A

0111 1011

&O173

&#123

&H7B

0111 1100

&O174

&#124

&H7C

0111 1101

&O175

&#125

&H7D

0111 1110

&O176

&#126

&H7E

0111 1111

&O177

&#127

&H7F

1000 0000

&O180

&#128

&H80

1000 0001

&O181

&#129

&H81

1000 0010

&O182

&#130

&H82

1000 0011

&O183

&#131

&H83

1000 0100

&O184

&#132

&H84

1000 0101

&O185

&#133

&H85

1000 0110

&O186

&#134

&H86

1000 0111

&O187

&#135

&H87

1000 1000

&O190

&#136

&H88

1000 1001

&O191

&#137

&H89

1000 1010

&O192

&#138

&H8A

1000 1011

&O193

&#139

&H8B

1000 1100

&O194

&#140

&H8C

1000 1101

&O195

&#141

&H8D

1000 1110

&O196

&#142

&H8E

1000 1111

&O197

&#143

&H8F

1001 0000

&O220

&#144

&H90

1001 0001

&O221

&#145

&H91

1001 0010

&O222

&#146

&H92

1001 0011

&O223

&#147

&H93

1001 0100

&O224

&#148

&H94

1001 0101

&O225

&#149

&H95

1001 0110

&O226

&#150

&H96

1001 0111

&O227

&#151

&H97

1001 1000

&O230

&#152

&H98

1001 1001

&O231

&#153

&H99

1001 1010

&O232

&#154

&H9A

1001 1011

&O233

&#155

&H9B

1001 1100

&O234

&#156

&H9C

1001 1101

&O235

&#157

&H9D

1001 1110

&O236

&#158

&H9E

1001 1111

&O237

&#159

&H9F

1010 0000

&O240

&#160

&HA0

1010 0001

&O241

&#161

&HA1

1010 0010

&O242

&#162

&HA2

1010 0011

&O243

&#163

&HA3

1010 0100

&O244

&#164

&HA4

1010 0101

&O245

&#165

&HA5

1010 0110

&O246

&#166

&HA6

1010 0111

&O247

&#167

&HA7

1010 1000

&O250

&#168

&HA8

1010 1001

&O251

&#169

&HA9

1010 1010

&O252

&#170

&HAA

1010 1011

&O253

&#171

&HAB

1010 1100

&O254

&#172

&HAC

1010 1101

&O255

&#173

&HAD

1010 1110

&O256

&#174

&HAE

1010 1111

&O257

&#175

&HAF

1011 0000

&O260

&#176

&HB0

1011 0001

&O261

&#177

&HB1

1011 0010

&O262

&#178

&HB2

1011 0011

&O263

&#179

&HB3

1011 0100

&O264

&#180

&HB4

1011 0101

&O265

&#181

&HB5

1011 0110

&O266

&#182

&HB6

1011 0111

&O267

&#183

&HB7

1011 1000

&O270

&#184

&HB8

1011 1001

&O271

&#185

&HB9

1011 1010

&O272

&#186

&HBA

1011 1011

&O273

&#187

&HBB

1011 1100

&O274

&#188

&HBC

1011 1101

&O275

&#189

&HBD

1011 1110

&O 276

&#190

&HBE

1011 1111

&O277

&#191

&HHBF

1100 0000

&O300

&#192

&HC0

1100 0001

&O301

&3193

&HC1

1100 0010

&O302

&#194

&HC2

1100 0011

&O303

&#195

&HC3

1100 0100

&O304

&#196

&HC4

1100 0101

&O305

&#197

&HC5

1100 0110

&O306

&#198

&HC6

1100 0111

&O307

&#199

&HC7

1100 1000

&O310

&#200

&HC8

1100 1001

&O311

&#201

&HC9

1100 1010

&O312

&#202

&HCA

1100 1011

&O313

&#203

&HCB

1100 1100

&O314

&#204

&HCC

1100 1101

&O315

&#205

&HCD

1100 1110

&O316

&#206

&HCE

1100 1111

&O317

&#207

&HCF

1101 0000

&O320

&#208

&HD0

1101 0001

&O321

&#209

&HD1

1101 0010

&O322

&#210

&HD2

1101 0011

&O323

&#211

&HD3

1101 0100

&O324

&#212

&HD4

1101 0101

&O325

&#213

&HD5

1101 0110

&O326

&#214

&HD6

1101 0111

&O327

&#215

&HD7

1101 1000

&O330

&#216

&HD8

1101 1001

&O 331

&#217

&HD9

1101 1010

&O332

&#218

&HDA

1101 1011

&O333

&#219

&HDB

1101 1100

&O334

&#220

&HDC

1101 1101

&O335

&#221

&HDD

1101 1110

&O336

&#222

&HDE

1101 1111

&O337

&#223

&HDF

1110 0000

&O340

&#224

&HE0

1110 0001

&O341

&#225

&HE1

1110 0010

&O342

&#226

&HE2

1110 0011

&O343

&#227

&HE3

1110 0100

&O344

&#228

&HE4

1110 0101

&O345

&#229

&HE5

1110 0110

&O346

&#230

&HE6

1110 0111

&O347

&#231

&HE7

1110 1000

&O350

&#232

&HE8

1110 1001

&O351

&#233

&HE9

1110 1010

&O352

&#234

&HEA

1110 1011

&O353

&#235

&HEB

1110 1100

&O354

&#236

&HEC

1110 1101

&O355

&#237

&HED

1110 1110

&O356

&#238

&HEE

1110 1111

&O357

&#239

&HEF

1111 0000

&O360

&#240

&HF0

1111 0001

&O361

&#241

&HF1

1111 0010

&O362

&#242

&HF2

1111 0011

&O363

&#243

&HF3

1111 0100

&O364

&#244

&HF4

1111 0101

&O365

&#245

&HF5

1111 0110

&O366

&#246

&HF6

1111 0111

&O367

&#247

&HF7

1111 1000

&O370

&#248

&HF8

1111 1001

&O371

&#249

&HF9

1111 1010

&O372

&#250

&HFA

1111 1011

&O373

&#251

&HFB

1111 1100

&O374

&#252

&HFC

1111 1101

&O375

&#253

&HFD

1111 1110

&O376

&#254

&HFE

1111 1111

&O377

&#255

&HFF

 

ASCII

ASCII [аски] American Standard Code for Information Interchange — американский стандартный код для обмена информацией. ASCII представляет собой 7-битную кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов.

ИСТОКИ

 Для компьютерного представления текста необходимо каждому знаку присвоить некоторое число — его код. Все современные таблицы кодировок происходят от возникшей еще в 60-е годы 7-разрядной таблицы ASCII (American Standard Code for Information Interchange), которая содержит 33 кода команд или управляющих символов, большая часть которых сегодня не используется, и 95 кодов для различных знаков, достаточных для работы.  с английскими текстами. При 7-разрядном кодировании каждому символу сопоставляется 7 бит, В простых текстовых (plain text) файлах допустимы только управляющие символы, то есть число в диапазоне от 0 до 127, отмечающие концы строк и переходы на позиции табуляции.

 Скажем, маркер конца строки в Linux — это код 10, в Macintosh OS — 13, в CP/M, DOS и Microsoft Windows — последовательность кодов 13, 10 (составляющих сигнал Enter). Для аналогичного представления знаков русского алфавита ныне применяется таблица КОИ-7 (Код для Обмена Информацией 7-битный): это та же ASCII, но вместо строчных латинских букв и шести других символов в ней размещены заглавные буквы кириллицы, а вместо заглавных — строчные.

У такого кодирования есть два важных преимущества: оно компактно (для доступа к латинским и другим буквам и возврата обратно к кириллице используются специальные управляющие коды) и вводит естественную транслитерацию, что позволяет работать с текстами на русском единообразно в разных компьютерных. системах. ASCII-коды все еще довольно широко используются для текстов на английском, особенно в США, а также в системах e-mail. Стандартные текстовые утилиты UNIX (grep, sed, awk) вплоть до середины 90-х по умолчанию могли работать только с ASCII подключение 8-го бита требовало их перекомпиляции. Сегодня 7-битная кириллица встречается, пожалуй, только в системе для подготовки научных публикаций.   

 

РАЗВИТИЕ

Международный стандарт ISO/IEC 8859-1 стал в наши дни де-факто заменой для ASCII. В нем первые 32 кода, числа 128–159, соответствуют почти неиспользуемым управляющим символам, общим для всех таблиц кодировки ISO, а для кодирования символов алфавитов большинства языков используется 8-разрядное кодирование, при котором каждому символу сопоставляется 8 бит или 1 байт кода. Код представляет собой число в диапазоне от 0 до 255, а первые 128 символов при таком кодировании аналогичны ASCII. Хотя 8859-1 может использоваться для текстов почти на всех западноевропейских языках, он не полностью покрывает нужды французского и финского.

Этот недостаток, а также отсутствие знака для новой общеевропейской валюты привели в 1999 году к возникновению кодировки 8859-15, в которой изменены значения восьми кодов 8859-1: 164 (A4) —  (20ac), 166 (A6) — Љ (0160), 168 (A8) — љ (0161), 180 (B4) — Ћ (017d), 184 (B8) — ћ (017e), 188 (BC) — Њ (0152), 189 (BD) — њ (0153), 190 (BE) — џ (0178). Всего в ISO 8859 определяются четырнадцать 8-битных таблиц кодировки: так, 8859-6 содержит набор арабских букв, 8859-7 — греческих, а 8859-8 — иврита. В компьютерах обычно используют 8-битные расширения ASCII. Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ ` { | } ~. В дополнение к этому, на месте  # может быть размещён ?, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов.

Вариант ASCII без национальных символов называется  US-ASCII, или «International Reference Version». Впоследствии оказалось удобнее использовать 8-битные кодировки (кодовые страницы), где нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов В Юникоде первые 128 символов тоже совпадают с соответствующими символами US-ASCII.

 Верхняя половина таблицы в настоящее время активно используется для представления кириллических символов её вариации (КОИ-8, Windows-1251 и другие) и  доставляют основные проблемы с кодировками. Для некоторых языков с нелатинской письменностью (русского, греческого, арабского, иврита) существовали более радикальные модификации ASCII.

Одним из вариантов был отказ от строчных латинских букв — на их месте размещались национальные символы (для русского и греческого — только заглавные буквы). Другой вариант — переключение между US-ASCII и национальным вариантом «на лету» с помощью символов SO (Shift Out) и SI (Shift In) — в этом случае в национальном варианте можно полностью устранить латинские  буквы и занять всё пространство под свои символы.

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

На подавляющем большинстве современных компьютеров минимально адресуемая единица памяти — 8-битный байт, поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя 1 нулевой бит (ведущий ноль) в качестве старшего разряда.   

СУЩЕСТВУЕТ пять признанных во всем мире таблиц кодировки русских букв:

1) ISO 8859-5 — стандарт международной организации по стандартизации для кириллицы, в РФ используется редко. Базируется на основной кодировке ГОСТ. Псевдографика отсутствует;

2) Кодовая страница (code page, CP) 866  основана на альтернативной кодировке ГОСТ. Она создана специально для ОС MS-DOS, в которой часто используются символы псевдографики. Практически вытеснена следующей таблицей;

3) Кодовая страница 1251 для Microsoft Windows стала популярной благодаря огромному влиянию фирмы Microsoft на рынок компьютерных технологий. Кроме того, в ней отсутствует ненужная в графических средах поддержка символов псевдографики и гораздо полнее, чем в других кодировках, представлены такие символы, как ©, ®, №,  различные виды кавычек, тире и т. п.;

4) На базе ГОСТ КОИ-8 сделана koi8-r (кодовая страница 878) — применяется в мире Linux. В ней естественным образом обеспечивается связь с 7-разрядным кодированием: отбрасыванием восьмого бита из кода буквы русского алфавита koi8-r получается код той же буквы в КОИ-7. пока туманны. Кодировка поддерживает символы псевдографики, занимающие около половины всех кодов.

В 1993 году стандартизирована в Интернете, а в начале XXI века появились ее модификации koi8-u и koi8-ub — с дополнениями до украинского и затем, соответственно, до белорусского. В koi8-ub вместо символов псевдографики включаются знаки разнообразных кавычек и тире, №, евро, иены и т. п. Эта кодировка находится на начальной стадии внедрения, и ее перспективы пока туманны;

5) Кодовая страница 10007 — используется на компьютерах Macintosh, по своему набору знаков почти совпадает с CP1251. 

ВООБЩЕ имеется  два  типа  кодов символов, коды  ASCII и  расширенные коды.

Kоды ASCII - это байтные числа, которые соответствуют расширенному  набору  кодов  ASCII для IBM PC, этот набор  включает  обычные символы пишущей машинки, а также ряд специальных букв и символов псевдографики.

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

Расширенные коды имеют длину 2 байта, причем  первый  байт всегда ASCII 0. Второй байт - номер  расширенного  кода.  Hапример, код  0:30  представляет Alt-A. Hачальный ноль позволяет  программе узнать, принадлежит ли данный код набору ASCII или расширенному набору. 

ИСТОРИЯ

ASCII была создана в 1963 году, в качестве стандарта впервые опубликована в 1967, последнее обновление - в 1986. 33 первых символа в ней – это  в большинстве своем устаревшие непечатаемые управляющие символы (которые обычно используются  для передачи команд периферийным устройствам, а  не выводятся как символы на экране), а 95 символов (от 32 до 127) - нормальные печатаемые символы, известные как печатный набор знаков ASCII (пробел рассматривается как печатный знак).

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

Существует расширенная версия ASCII с использованием 8 бит, она предоставляет дополнительные коды 128-255 для отображения других знаков.   

 ОСНОВАТЕЛЕМ ASCII считается Боб Бемер (сотрудник IBM), изобрётший в 1963 году его код. До этого различные компьютеры не могли взаимодействовать друг с другом, ибо каждый производитель пытался по-своему представить символы алфавита, цифры и управляющие коды.  Между тем взаимодействие между компьютерами стало настоятельной необходимостью.

 В 1961 году будущий изобретатель ASCII принял предложение представителей Американского национального института стандартов (ANSI) поработать у них над созданием новой системы кодировки символов. Возглавляемый вице-президентом компании Teletype Джоном Аувертером комитет ANSI X3.4, приступил к работе.

Комитету понадобилось свыше двух лет, чтобы проанализировать позиции всех сторон, найти компромисс и завершить разработку универсального кода. Одной из причин столь долгих дебатов стала борьба между интересами отдельных компаний. Комитет должен был решить, чей именно набор символов принять за основу. Доходило до мелочных придирок, — рассказывает Бемер. — Но в конце концов Аувертер и я пожали друг другу руки, сказав: ‘Пусть будет так’. Конечный результат полностью совпал с первоначальным вариантом, который предлагал Бемер.

СЕГОДНЯ все символы, используемые в сообщениях электронной почты, являются символами ASCII. То же самое можно сказать и о символах, присутствующих в документах HTML. Код ASCII стал общим знаменателем для компьютеров, которые ранее не имели друг с другом ничего общего.

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

 Однако между изобретением кода ASCII в 1963 году и его всеобщим признанием лежала пропасть в 18 лет. Причиной такого развития событий стала корпорация IBM со своим семейством компьютеров System/360, появившимся в 1964 году. Пока стандарт ASCII находился в процессе разработки, все (в том числе и представители IBM) считали, что IBM должна перейти на использование нового кода. До той поры корпорация IBM отдавала предпочтение EBCDIC — расширению старого, еще перфокарточного кода. Но после анонса ASCII и выпуска System/360 руководитель коллектива разработчиков OS/360 Фредерик Брукс заявил Бемеру, что перфораторы и принтеры не удастся модернизировать в установленный срок.

Корпорация IBM попыталась реализовать возможность переключения компьютеров System/360 с кода ASCII на EBCDIC и обратно, но и из этого ничего не получилось. До 1981 года, когда IBM наконец выпустила свой первый ПК и перешла на ASCII, единственным компьютером, использующим этот код, была модель Univac 1050, появившаяся на свет в 1964 году (правда, Teletype практически сразу перевела на ASCII все свои консоли). С этого момента код ASCII превратился в стандартное средство организации взаимодействия между различными компьютерами.

 История развития ASCII будет неполной без рассказа об управляющих (escape) последовательностях По мнению Бемера, именно удобством применения этих последовательностей во многом обусловлены успех и популярность ASCII. С самого начала члены комитета ANSI понимали, что описать все особенности взаимодействия различных систем при помощи 128 символов невозможно. Но в то время аппаратные ограничения не позволяли им выйти за пределы 7 бит. Поэтому Бемеру пришлось специально разработать так называемые escape – последовательности, позволяющие компьютеру осуществлять переход с одного алфавита на другой. С 1963 года в мире было создано свыше 150 дополнительных алфавитов ASCII. 

КОД ASCII остался одной из немногих технологий, которой удалось успешно пройти сквозь десятилетия и дожить до наших дней

Таблица ASCII КОДИРОВКИ СИМВОЛОВ (CP WINDOWS-1251)

 

Гостевая
Гостевая
   

mail: GeDeL@bk.ru
ICQ: 223229551

Hosted by uCoz