Системы счисления & ASCII
|
ИСТОКИ СИСТЕМ СЧИСЛЕНИЯ Алфавит десятичных (арабских) цифр: 0 1 2 3 4 5 6 7 8 9 Английский (латинский) алфавит:
КОМПЬЮТЕРУ никак не объяснишь десятичную систему счисления. Компьютер как электрическая машина понимает только одно - колебания электрического тока (в объяснении которого человечество пока остановилось на той версии, что электрический ток есть направленный поток электронов, в чём я лично сомневаюсь, ибо представлять неведомое нам движение неких субстанций - электронов, движущихся, как говорят, по орбитам вокруг ядер атомов, по аналогии с потоком автомобилей на дороге, думаю, неправильно. Да и по орбитам они скорее всего вокруг ядер не летают в нашем понимании полёта. Никто и ничего там не движется в нашем понимании движения. Там скорее всего работают некие поля, свойств которых мы ещё не знаем). Чтобы передать компьютеру некую информацию на единственно доступном ему для понимания языке (колебания, изменения электрического тока), очевидно надо создать такую систему счисления, которая бы отражала именно этот момент (изменение, колебания тока). Над решением этой головоломки человечеству не пришлось долго ломать голову, ибо такая система счисления уже была придумана в докомпьютерную эпоху. Вообще здесь очень многое удачно совпало, что говорит о том, что компьютер – не случайное явление в жизни людей. ВО-ПЕРВЫХ, люди испокон веков не чурались самого принципа кодирования информации и использовали для кодирования оной на первых порах вообще всё, что находили под рукой, всякие зарубки, заметки, узелки на память и тому подобное (так называемая единичная система счисления). То есть вот завязали узелок на платочке вне связи с каким бы то ни было материальным или логическим предметом и стали помнить, что вот этот узелок есть напоминание о том, что надо бы посетить с ответным визитом соседнюю пещеру на другом склоне горы. ВО-ВТОРЫХ, дальше развили эту единичную систему, прибавив к одному узелку другой, стало уже два узелка, возникла система узелков, в которой один узелок ссылается на другой. Двумя узелками стало возможно кодировать более сложную информацию и детализировать её более подробно (один узелок – посетить пещеру, второй – захватить с собой что-нибудь выпить-закусить). От двух узелков недалеко и до двоичной системы счисления, надо только сделать так, чтобы узелки не просто мирно соседствовали друг с другом в статике, напоминая о чём-то, а взаимодействовали друг с другом в динамике, и это взаимодействие порождало бы новые числа. Две руки у человека всегда взаимодействуют друг с другом и это подсказало человеку, что и узелкам неплохо бы проделывать то же самое. В-ТРЕТЬИХ, человечество к моменту появления компьютеров уже разработало и оформило сам принцип двоичного счёта (на предмет использования его для кодировки информации для передачи последней на расстояние) как манипулирование двумя разными физическими либо логическими штуками и составление из них таблиц кодов – от флагов морских сигнальщиков через семафорную азбуку и до азбуки Морзе, использующей разность длин электрических разрядов, когда относительно долгое нажатие на некий электрический тумблер и соответственно относительно долгий (длинный) электрический сигнал в элетрической цепи заставлял печатающее устройство на другом конце передачи проводить линию и был принят за тире, а относительно быстрое нажатие на тумблер и относительно недолгий, короткий сигнал током в электрической цепи заставлял печатающее устройство на другом конце передачи печатать точку. Из точек и тире была составлена азбука, разным комбинациям точек-тире были поставлены в соответствие различные буквы алфавита (в принципе, неважно, какого, хотя, конечно же, на первых порах латинского, англоязычного). Возникла знаменитая морзянка. Один из вариантов её, который когда-то где-то попался мне на просторах интернета, такой: · - 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. Логарифм вообще есть показатель степени (отвлечённое значение), в которое нужно возвести основание (отвлечённое значение), чтобы получить число (реальное значение, несёт реальный рабочий практический смысл, параметр какого-либо реального явления, процесса). То есть в операции логарифмирования участвуют три числа: само рабочее число, его заменитель, показатель степени (степень), и основание, которое возводят в эту степень и получают при этом рабочее исходное число. Основание есть как бы посредник между рабочим числом и степенью того же числа (его логарифмом). Логарифмический метод таким образом заменяет числа степенями этих чисел, в которые возводятся посредники между числами и степенями – основания. Показатели степеней меньше чем числа (следовательно человек оперирует в конце концов с меньшими числами), и кроме того, операции умножения/деления (в области чисел) в области степеней заменяются операциями сложения/вычитания, что разумеется несравненно легче проделывать (при взаимодействии одинаковых оснований их степени складываются или вычитаются). От одного рабочего числа (параметр чего-либо реального) мы через посредника (основание) идём к степени этого основания, облегчённо оперируем этими степенями (операции сложения/вычитания заведомо легче операций умножения/деления) и возвращаемся опять к другому рабочему числу, соответствующему новой степени. Тем самым упрощаются вычисления в целом (например артиллерист в бою вычисляет параметры стрельбы из пушки и вместо перемножения/деления этих чисел-параметров производит сложение/вычитание представителей этих чисел, их степеней по какому-то основанию). Чтобы практически у каждого числа (в разумных практически применяемых пределах) был его представитель (показатель степени, логарифм), нужно очевидно взять за основание логарифма число возможно более приближенное к 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. Переведём шестнадцатиричное число &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, так называемое длинное целое) в разном представлении: в двоичном виде 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 позиций (байт) соответствия значений разных систем счисления друг другу:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 стал общим знаменателем для компьютеров, которые ранее не имели друг с другом ничего общего. Однако между изобретением кода 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 |