Шестнадцатеричный код. Шестнадцатеричная нумерация и адресация

15.10.2019 Мониторы

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

Система счисления с основанием 16 использует числа от 0 до 9 и буквы от A до F. Рисунок показывает эквивалентные десятичные, двоичные и шестнадцатеричные значения для двоичных чисел от 0000 до 1111. Для нас легче выражать значение в виде одной шестнадцатеричной цифры, чем в виде четырех битов.

Понимание Байтов

Учитывая, что 8 битов (байт) являются стандартной двоичной группировкой, двоичные числа от 00000000 до 11111111 могут быть представлены в шестнадцатеричной записи как числа от 00 до FF. Начальные нули всегда отображаются, чтобы завершить 8-разрядное представление. Например, двоичное значение 0000 1010 в шестнадцатеричном виде будет 0A.

Представление Шестнадцатеричных Значений

Отметьте: Важно отличать шестнадцатеричные значения от десятичных значений для символов от 0 до 9, как показано на рисунке.

Шестнадцатеричные значения обычно представляются в тексте значением, которому предшествует 0x (например 0x73), или с помощью нижнего индекса 16. Реже, они могут сопровождаться буквой H, например 73H. Однако, поскольку текст нижнего индекса не распознается ни в командной строке, ни в средах программирования, в техническом представлении шестнадцатеричных чисел им предшествует "0x" (нуль X). Поэтому, примеры выше были бы показаны в виде 0x0A и 0x73 соответственно.

Шестнадцатеричная запись используется, чтобы представлять MAC-адреса Ethernet и адреса IP Версии 6.

Шестнадцатеричные Преобразования

Преобразования чисел между десятичными и шестнадцатеричными значениями являются простыми, но быстрое деление или умножение на 16 не всегда удобно. Если такие преобразования необходимы, обычно легче преобразовать десятичное или шестнадцатеричное значение в двоичное, а затем преобразовать двоичное значение в десятичное или шестнадцатеричное, в зависимости от того, что требуется получить.

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

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

Но, как мы знаем, традиционных ("арабских") цифр всего десять. А требуется шестнадцать. Получается, что не хватает шести знаков.

Замечание
Таким образом, возникает чисто дизайнерская задача по теме "Знаки" - придумать недостающие символы для цифр
.

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

Замечание
Надеемся, что всем понятно, почему в этом случае нельзя использовать, например, числа "10", "11", "12" и т. д.? Потому что, если мы говорим о шестнадцатеричной системе счисления, то должно быть шестнадцать цифр , а не чисел
.

И десятичное число "10" стали обозначать латинской буквой "А" (точнее, "цифрой А"). Соответственно, дальше идут цифры "В", "С", "D", "Е" и "Р.

Поскольку мы намеревались построить шестнадцатеричную систему, то, начиная с нуля, здесь как раз и получится 16 цифр. Например, цифра "D" - это десятичное число "13", а цифра "F" - это десятичное число "15".

Когда к шестнадцатеричному числу "F" прибавляем единицу, то, поскольку эти цифры у нас кончились, в этом разряде ставим "О", а в следующий разряд переносим единицу, поэтому получается, что десятичное число "16" будет представлено в шестнадцатеричной системе счисления числом "10", т. е. получается "шестнадцатеричная десятка". Соединим десятичные и шестнадцатеричные числа в единую таблицу (табл. 4.5).

Таблица 4.5 . Соответствие десятичных и шестнадцатеричных чисел.

Десятичное число Шестнадцатеричное число Десятичное число Шестнадцатеричное число
0-9 0-9 29 1D
10 А 30
11 В 31 1F
12 С 32-41 20-29
13 D 42-47 2A-2F
14 Е 48-255 30-FF
15 F 256 100
16 10 512 200
17-25 11-19 1024 400
26 1280 500
27 4096 1000
28 1C

Шестнадцатеричная система используется, чтобы более компактно записывать двоичную информацию. В самом деле, "шестнадцатеричная тысяча", состоящая из четырех разрядов, в двоичном виде занимает тринадцать разрядов (1000 16 = 1000000000000 2).

При обсуждении систем счисления неоднократно фигурировали "десятки", "сотни" и "тысячи", поэтому необходимо обратить внимание на так называемые "круглые" числа.

Привычная для человека система счисления – десятичная. В ее основу входят десять цифр от 0 до 9. Шестнадцатеричную систему отличает наличие в ней первых шести букв латинского алфавита для записи чисел помимо основных цифр. То есть после цифры 9 следует символ «A», который соответствует числу 10 для десятичной системы. Соответственно, F в шестнадцатеричной системе – это 16 в десятичной. Использование шестнадцати символов в системе – неслучайный выбор.

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

Для того чтобы отличать, что число записано в шестнадцатеричной системе, после него записывают букву «h» или нижний индекс «16».

Применение

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

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

Также одно из применений шестнадцатеричных символов – описание цветовых схем, то есть три компонента R, G, B описываются соответствующим данной системе способом. Данный подход к записи получил название шестнадцатеричный цвет

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

Таблица 2.4. 16-ричная система кодирования
Десятичная система 16-ричная система Десятичная система 16-ричная система
0 0 (0000) 10 A (1010)
1 1(0001) 11 B (1011)
2 2 (0010) 12 C (1100)
3 3 (0011) 13 D (1101)
4 4 (0100) 14 E (1110)
5 5 (0101) 15 F (1111)
6 6 (0110) 16 10 (00010000)
7 7 (0111) 17 11 (00010001)
8 8 (1000) 18 12 (00010010)
9 9 (1001) 19 13 (00010011)

Для перевода 16-ричного числа в десятичное необходимо умножить значение младшего (нулевого) разряда на единицу, значение следующего (первого) разряда на 16, второго разряда на 256 (16 2) и т.д., а затем сложить все произведения. Например, возьмем число A17F :

A17F=F*16 0 + 7*16 1 + 1*16 2 + A*16 3 = 15*1 + 7*16+1*256+10*4096=41343

Таблица 2.5. 8-ричная система кодирования
Десятичная система 8-ричная система Десятичная система 8-ричная система
0 0 (000) 10 12 (001010)
1 1(001) 11 13 (001011)
2 2 (010) 12 14 (001100)
3 3 (011) 13 15 (001101)
4 4 (100) 14 16 (001110)
5 5 (101) 15 17 (001111)
6 6 (110) 16 20 (010000)
7 7 (111) 17 21 (010001)
8 10 (001000) 18 22 (010010)
9 11 (001001) 19 23 (010011)

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

Значительно реже, чем 16-ричное, используется восьмеричное кодирование , которое строится по такому же принципу, что и 16-ричное, но двоичные разряды разбиваются на группы по три разряда. Каждая группа (разряд кода) затем обозначается одним символом. Каждый разряд 8-ричного кода может принимать восемь значений: 0, 1, 2, 3, 4, 5, 6, 7 (табл. 2.5) .

Помимо рассмотренных кодов, существует также и так называемое двоично-десятичное представление чисел. Как и в 16-ричном коде, в двоично-десятичном коде каждому разряду кода соответствует четыре двоичных разряда, однако каждая группа из четырех двоичных разрядов может принимать не шестнадцать, а только десять значений, кодируемых символами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. То есть одному десятичному разряду соответствует четыре двоичных. В результате получается, что написание чисел в двоично-десятичном коде ничем не отличается от написания в обычном десятичном коде (табл. 2.6) , но в реальности это всего лишь специальный двоичный код, каждый разряд которого может принимать только два значения: 0 и 1. Двоично-десятичный код иногда очень удобен для организации десятичных цифровых индикаторов и табло.

Таблица 2.6. Двоично-десятичная система кодирования
Десятичная система Двоично-десятичная система Десятичная система Двоично-десятичная система
0 0 (0000) 10 10 (00010000)
1 1(0001) 11 11 (00010001)
2 2 (0010) 12 12 (00010010)
3 3 (0011) 13 13 (00010011)
4 4 (0100) 14 14 (00010100)
5 5 (0101) 15 15 (00010101)
6 6 (0110) 16 16 (00010110)
7 7 (0111) 17 17 (00010111)
8 8 (1000) 18 18 (00011000)
9 9 (1001) 19 19 (00011001)

В двоичном коде над числами можно проделывать любые арифметические операции : сложение , вычитание , умножение , деление .

Рассмотрим, например, сложение двух 4-разрядных двоичных чисел. Пусть надо сложить число 0111 (десятичное 7) и 1011 (десятичное 11). Сложение этих чисел не сложнее, чем в десятичном представлении:

При сложении 0 и 0 получаем 0, при сложении 1 и 0 получаем 1, при сложении 1 и 1 получаем 0 и перенос в следующий разряд 1. Результат - 10010 (десятичное 18). При сложении любых двух n-разрядных двоичных чисел может получиться n-разрядное или (n+1) -разрядное число.

Точно так же производится вычитание . Пусть из числа 10010 (18) надо вычесть число 0111 (7). Записываем числа с выравниванием по младшему разряду и вычитаем точно так же, как в случае десятичной системы:

При вычитании 0 из 0 получаем 0, при вычитании 0 из 1 получаем 1, при вычитании 1 из 1 получаем 0, при вычитании 1 из 0 получаем 1 и заем 1 в следующем разряде. Результат - 1011 (десятичное 11).

При вычитании возможно получение отрицательных чисел, поэтому необходимо использовать двоичное представление отрицательных чисел.

Для одновременного представления как двоичных положительных, так и двоичных отрицательных чисел чаще всего используется так называемый дополнительный код . Отрицательные числа в этом коде выражаются таким числом, которое, будучи сложено с положительным числом такой же величины, даст в результате нуль. Для того чтобы получить отрицательное число, надо поменять все биты такого же положительного числа на противоположные (0 на 1, 1 на 0) и прибавить к результату 1. Например, запишем число –5. Число 5 в двоичном коде выглядит 0101. Заменяем биты на противоположные: 1010 и прибавляем единицу: 1011. Суммируем результат с исходным числом: 1011 + 0101 = 0000 (перенос в пятый разряд игнорируем).

по модулю 2 два двоичных числа 0111 и 1011:

Среди других побитовых операций над двоичными числами можно отметить функцию И и функцию ИЛИ. Функция И дает в результате единицу только тогда, когда в соответствующих битах двух исходных чисел обе единицы, в противном случае результат -0. Функция ИЛИ дает в результате единицу тогда, когда хотя бы один из соответствующих битов исходных чисел равен 1, в противном случае результат 0.

Шестнадцатеричная система счисления (также — шестнадцатеричный код) является позиционной системой счисления с целочисленным основанием 16. Иногда в литературе также используется термин hex (произносится «хекс», сокращение от англ. hexadecimal). Цифрами данной системы счисления принято использовать арабские цифры 0—9, а также первые символы латинского алфавита A—F. Буквы соответствуют следующим десятичным значениями:

  • * A —10;
  • * B —11;
  • * C —12;
  • * D —13;
  • * E — 14;
  • * F — 15.

Таким образом, десять арабских цифр вкупе с шестью латинскими буквами и составляют шестнадцать цифр системы.

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

Применение . Шестнадцатеричный код широко применяется в низкоуровневом программировании, а также в различных компьютерных справочных документах. Популярность системы обоснована архитектурными решениями современных компьютеров: в них в качестве минимальной единицы информации установлен байт (состоящий из восьми бит) — а значение байта удобно записывать с помощью двух шестнадцатеричных цифр. Значение байта может ранжироваться с #00 до #FF (от 0 до 255 в десятичной записи) — другими словами, используя шестнадцатеричный код , можно записать любое состояние байта, при этом не остаётся «лишних» не используемых в записи цифр.

В кодировке Юникод для записи номера символа используется четыре шестнадцатеричных цифры. Запись цвета стандарта RGB (Red, Green, Blue — красный, зелёный, синий) также часто использует шестнадцатеричный код (например, #FF0000 — запись ярко-красного цвета).

Способ записи шестнадцатеричного кода.

Математический способ записи . В математической записи основание системы записывают в десятичном виде в нижнем индексе справа от числа. Десятичную запись числа 3032 можно записать как 3032 10 , в шестнадцатеричной системе данное число будет иметь запись BD8 16 .

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

* В синтаксисе некоторых разновидностей языка ассемблера используется латинская буква «h», которая ставится справа от числа, например: 20Dh. Если число начинается с латинской буквы, то перед ним ставится ноль, например: 0A0Bh. Это сделано для того, чтобы отличать от констант значения, использующие шестнадцатеричный код ;

* В прочих разновидностях ассемблера, а также в Pascal (и его разновидностях, таких как Delphi) и некоторых диалектах Basic, применяют префикс «$»: $A15;

* В языке разметки HTML, а также в каскадных файлах CSS, для указания цвета в формате RGB с шестнадцатеричной системой записи, используется префикс «#»: #00DC00.

Как перевести шестнадцатеричный код в другую систему?

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

Двоичная СС

шестнадцатеричная СС

Например, требуется выполнить перевод шестнадцатеричного числа A14: в нём три цифры. Используя правило, запишем его в виде суммы степеней с основанием 16:

A14 16 = 10.16 2 + 1.16 1 + 4.16 0 = 10.256 + 1.16 + 4.1 = 2560 + 16 + 4 = 2580 10

Перевод чисел из двоичной в шестнадцатеричную систему и наоборот.

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

Таблица тетрад для перевода.

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

Двоичная СС

Восьмеричная СС

Пример перевода из шестнадцатеричной системы в двоичную : A5E 16 = 1010 0101 1110 = 101001011110 2

Пример перевода из двоичной системы в шестнадцатеричную : 111100111 2 = 0001 1110 0111 = 1E7 16

В этом примере количество цифр в исходном двоичном числе не было равным четырём (9), поэтому были добавлены незначащие нули — общее число цифр стало 12.

Автоматический перевод . Быстрый перевод из шестнадцатеричной системы счисления в одну из трёх популярных систем (двоичную, восьмеричную и десятичную), как и обратный перевод, можно выполнить, используя стандартный калькулятор из комплекта поставки ОС Windows. Откройте калькулятор, выберите в меню Вид -> Программист. В данном режиме можно устанавливать систему счисления, используемую в данный момент (см. меню слева: Hex, Dec, Oct, Bin). При этом изменение текущей системы счисления автоматически производит перевод.