Перевод чисел в шестнадцатеричную систему счисления
Решение получаем через калькулятор. Переводим целую часть числа ( 56 ).
Целая часть от деления | Остаток от деления |
56 div 16 = 3 | 56 mod 16 = 8 (56 — 3 *16) | 3 div 16 = 0 | 3 mod 16 = 3 | 0 div 16 = 0 | 0 mod 16 = 0 |
Остаток от деления записываем в обратном порядке. Получаем число в 16-ой системе счисления: 038
56 = 03816
Для перевода дробной части числа последовательно умножаем дробную часть на основание 16. В результате каждый раз записываем целую часть произведения.
0.567*16 = 9.072 (целая часть 9 )
0.072*16 = 1.152 (целая часть 1 )
0.152*16 = 2.432 (целая часть 2 )
0.432*16 = 6.912 (целая часть 6 )
Получаем число в 16-ой системе счисления: 9126
0.567 = 912616
Таким образом, число 56,567 в шестнадцатеричной системе счисления записывается как 38,9126.
Пример 2 . Перевести число 0101110,011 в шестнадцатеричное представление.
Переводим целую часть числа. Для этого разделим исходный код на группы по 4 разряда.
01011102 = 0010 1110 2
Затем заменяем каждую группу на код из таблицы.
Двоичная СС | Шестнадцатеричная СС |
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 | C |
1101 | D |
1110 | E |
1111 | F |
Получаем число: 0010 1110 2 = 2E16
Переводим дробную часть числа. Для этого разделим исходный код на группы по 4 разряда.
0112 = 01102
Затем заменяем каждую группу на код из таблицы.
Получаем число: 01102 = 616
Пример 3 . Перевести число 456,548 в шестнадцатеричное представление.
Переводим целую часть числа. Заменяем каждый разряд на код из таблицы.
Двоичная СС | Восьмеричная СС |
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Получаем число: 4568 = 1001011102
Переводим дробную часть числа.
Получаем число: 548 = 1011002
Переводим целую часть числа. Для этого разделим исходный код на группы по 4 разряда.
1001011102 = 0001 0010 1110 2
Затем заменяем каждую группу на код из таблицы.
Получаем число: 0001 0010 1110 2 = 12E16
Переводим дробную часть числа. Для этого разделим исходный код на группы по 4 разряда.
1011002 = 1011 00002
Затем заменяем каждую группу на код из таблицы.
Получаем число: 1011 00002 = B016
Быстрый перевод между системами счисления с основаниями 2, 4, 8, 16.
Когда я разбирал быстрый и точный перевод из десятичной системы в двоичную с использованием разрядов, я обещал, что напишу, как быстро переводить без десятичной системы между двоичной, восьмеричной, шестнадцатиричной системами (часто те, кто хорошо знает метод «деления уголком», переводят сначала в десятичную, а потом в нужную новую). И вот эта статья перед Вами. В ней я не только дам этот метод (он и так валяется везде в интернете), но и опишу его принцип и объясню, почему перевод 2 8 работает, а 2 10 или 8 16 — нет. Как обычно, самое интересное — в конце.
Метод
Очень простой: заменяем цифры в записи справа налево в соответствии с нужной таблицей:
Теперь всё очень просто, как это — туда, а то — сюда : в 16-ричной системе каждая цифра будет заменена на 4 двоичных и наоборот — каждые 4 двоичных цифры будут заменяться на одну 16-ричную.
Если требуется перевести из 8-ричной в 16-ричную, то перевод осуществляем через двоичную (8->2->16).
Пример: 7F21 из 16-ричной в двоичную. «1» заменим на «0001» , «2» — на «0010», «F» — на «1111» и «7» — на «0111»: «(0111)(1111)(0010)(0001)». Лидирующий (левый) ноль стираем: 111111100100001. Профит. Можно так же быстро в восьмеричную: (111)(111)(100)(100)(001)-77441_8
Как это устроено
Всё дело в волшебных. разрядах. Разряды идут:
Смотрите, они одинаковые. В четверичной используется каждый второй двоичный разряд, в восьмеричной — каждый третий, а в 16-ричной — каждый четвёртый. Для разбора, как это работает я возьму пример перевода из 8й системы в двоичную. Сделаем заготовку для двоичной:
Теперь можно просто «перенести» цифры:
Запись получилась не двоичная, но так и должно быть. Посмотрите, в двоичной системе ни один разряд не может браться 2,3,4 и более раз, а у нас 64 берётся 7 раз. Вспомним болты, гайки и шайбы , которые разменивались друг на друга пачками. Пусть у нас болт стоит 256, гайка — 128, а шайба — 64 с порогом размена по 2 (двоичная же система) . Имеем по факту 7 шайб . 7 шайб можно разменять на 3 гайки и одна шайба останется (каждую гайку за 2 шайбы ):
Та же участь ждёт гайки . Из трёх гаек можно взять 2 и разменять на 1 болт :
Теперь надо так же разменять «4». Четыре «восьмёрки» ( шайбы ) разменяется ровнёхонько на один по «32» ( болт )
В те разряды, которые не задействованы, ставим 0.
Из этого примера видно, почему в восьмеричной системе используются группы по три цифры — один восьмеричный разряд прекрасно разменивается на три двоичных. В общем-то, понятно, что при переводе 2-4 и 4-2 будут группы по две цифры, потому что в четверичной системе каждый второй двоичный разряд
Техника перевода будет работать и в других парах систем счисления, где разряды совпадают. Тут важно, чтобы каждый разряд старшей системы обязательно встречался среди разрядов младшей. Например, троичная-девятиричная:
Напрямую можно переводить и между четверичной и 16-ричной. А вот десятичная тут ущербная. Её разряды не встречаются ни в одной другой «практически полезной» системе: . -1000-100-10-1. Здесь есть корреляция с простыми делителями (не даром есть метод «деления уголком») оснований систем счисления. У чисел 4, 8, 16 и т.д. делитель только один — двойка. Поэтому и разряды в них только из двоичной системы. Для девятки делитель тоже только один — тройка. А вот у десятки сразу два простых делителя. Это 5 и 2. Значит, у «сродной» системы к десятичной будут делители основания 25 и 4 (квадраты), а это только 100-ричная.
Напоследок
Подарю пример перевода между системами 2->10 с помощью » деления уголком «. Не из десятичной в двоичную, а наоборот. Метод настолько универсальный, что работает даже там. Делим уголком 111001001 на 1010 (в двоичной системе так записывается основание «нашей» десятичной системы) и записываем остатки в обратном порядке:
Вдруг, кому пригодится деление в двоичной системе. Я хотел сначала в девятиричную перевести (надо было делить на 1001), но это неспециалисту проверить труднее.
Шестнадцатеричный код.
Шестнадцатеричная система счисления (также — шестнадцатеричный код) является позиционной системой счисления с целочисленным основанием 16. Иногда в литературе также используется термин hex (произносится «хекс», сокращение от англ. hexadecimal). Цифрами данной системы счисления принято использовать арабские цифры 0—9, а также первые символы латинского алфавита A—F. Буквы соответствуют следующим десятичным значениями:
Таким образом, десять арабских цифр вкупе с шестью латинскими буквами и составляют шестнадцать цифр системы.
Кстати, на нашем сайте вы можете перевести любой текст в десятичный, шестнадцатеричный, двоичный код воспользовавшись Калькулятором кодов онлайн.
Применение. Шестнадцатеричный код широко применяется в низкоуровневом программировании, а также в различных компьютерных справочных документах. Популярность системы обоснована архитектурными решениями современных компьютеров: в них в качестве минимальной единицы информации установлен байт (состоящий из восьми бит) — а значение байта удобно записывать с помощью двух шестнадцатеричных цифр. Значение байта может ранжироваться с #00 до #FF (от 0 до 255 в десятичной записи) — другими словами, используя шестнадцатеричный код, можно записать любое состояние байта, при этом не остаётся «лишних» не используемых в записи цифр.
В кодировке Юникод для записи номера символа используется четыре шестнадцатеричных цифры. Запись цвета стандарта RGB (Red, Green, Blue — красный, зелёный, синий) также часто использует шестнадцатеричный код (например, #FF0000 — запись ярко-красного цвета).
Способ записи шестнадцатеричного кода.
Математический способ записи. В математической записи основание системы записывают в десятичном виде в нижнем индексе справа от числа. Десятичную запись числа 3032 можно записать как 303210, в шестнадцатеричной системе данное число будет иметь запись BD816.
В синтаксисе языков программирования. Синтаксис различных языков программирования по-разному устанавливает формат записи числа, использующего шестнадцатеричный код:
* В C, C++ и схожих языках (Java) для этого используется префикс «0x», например: 0x0A0B;
* В синтаксисе некоторых разновидностей языка ассемблера используется латинская буква «h», которая ставится справа от числа, например: 20Dh. Если число начинается с латинской буквы, то перед ним ставится ноль, например: 0A0Bh. Это сделано для того, чтобы отличать от констант значения, использующие шестнадцатеричный код;
* В прочих разновидностях ассемблера, а также в Pascal (и его разновидностях, таких как Delphi) и некоторых диалектах Basic, применяют префикс «$»: $A15;
* В языке разметки HTML, а также в каскадных файлах CSS, для указания цвета в формате RGB с шестнадцатеричной системой записи, используется префикс «#»: #00DC00.
Как перевести шестнадцатеричный код в другую систему?
Перевод из шестнадцатеричной системы в десятичную. Для совершения операции перевода из шестнадцатеричной системы в десятичную, требуется представить исходное число как сумму произведений цифр в разрядах шестнадцатеричного числа на степень основания.