Урок №5
Шестнадцатеричная система счисления.
Шестнадцатеричная система счисления — позиционная система счисления по основанию 16.
В качестве цифр этой системы счисления обычно используются цифры от 0 до 9 и латинские буквы от A до F. Буквы A, B, C, D, E, F имеют значения 1010, 1110, 1210, 1310, 1410, 1510 соответственно. Пример шестнадцатеричного числа: 1A45F0D (1A45F0D16 = 27 549 45310).
Широко используется в низкоуровневом программировании и компьютерной документации, поскольку в современных компьютерах минимальной адресуемой единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами, а значение половины байта — полубайта — одной цифрой. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему.
В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями).
Шестнадцатеричный цвет — запись трёх компонентов цвета (R, G и B) в шестнадцатеричном виде. Например, цвет, имеющий шестнадцатеричный номер 00FF00, — ярко-зелёный (__).
Способы записи
В математике
В математике основание системы счисления принято указывать в десятичной системе в нижнем индексе. Например, десятичное число 1443 можно записать как 144310 или как 5A316.
В языках программирования
В разных языках программирования для записи шестнадцатеричных чисел используют различный синтаксис:
- В Ада и VHDL такие числа указывают так: «16#5A3#».
- В Си и языках схожего синтаксиса (например, в Java), а также в ряде языков ассемблера используют префикс «0x». Например, «
0x5A3». - В некоторых языках ассемблера используют букву «h», которую ставят после числа. Например, «5A3h». При этом, если число начинается не с десятичной цифры, то для отличия от имён идентификаторов (например, констант) впереди ставится «0» (ноль)[1]: «0FFh» (25510)
- Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бейсика в качестве префикса-признака используют «$». Например, «$5A3».
- Другие версии Бейсика, например Turbo Basic, используют для указания шестнадцатеричных цифр сочетание «&h» или «&H» перед числом. Например, «&h5A3».
- В ассемблерах для IBM mainframe (Assembler F, Assembler 2, Assembler H) используется запись X’xx..xx’. Например X’05A3′.
- Некоторые иные платформы (например ZX Spectrum) в своих ассемблерах (MASM, TASM, ALASM, GENS и т. д.) использовали запись #5A3, обычно выровненную до одного или двух байт: #05A3.
- В Unix-подобных операционных системах (и многих языках программирования, имеющих корни в Unix/Linux) непечатные символы при выводе/вводе кодируются как
0xCC, где CC — шестнадцатеричный код символа.
Перевод чисел из одной системы счисления в другую
Перевод чисел из шестнадцатеричной системы в десятичную
Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа.
Например, требуется перевести шестнадцатеричное число 3A5 в десятичное. В этом числе 3 шестнадцатеричные цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:
3A516 = 3·162+10·161+5·160=
= 3·256+10·16+5·1 = 768+160+5 = 93310
При переводе чисел следует помнить, что в шестнадцатеричной системе счисления: A=10; B=11; C=12; D=13; E=14; F=15.
Перевод чисел из двоичной системы в шестнадцатеричную и наоборот
Для перевода многозначного двоичного числа в шестнадцатеричную систему нужно разбить его на тетрады справа налево и заменить каждую тетраду соответствующей шестнадцатеричной цифрой.
Для перевода числа из шестнадцатеричной системы в двоичную нужно заменить каждую его цифру на соответствующую тетраду из нижеприведённой таблицы перевода. Например:
- 0101101000112 = 0101 1010 0011 = 5A316
Для представление целого шестнадцатеричного числа в развёрнутой форме записи нужно использовать следующую формулу:

Распишем предоставленное шестнадцатеричное число A6E в развёрнутой форме.
Ставим знак равно. Снова проставим степени для шестнадцати над цифрами нашего числа справа налево.

Пишем букву А и умножаем её на 162. Ставим плюс. Пишем цифру 6, умноженную на 161 и прибавляем букву Е, умноженную на 160.

Для перевода целого шестнадцатеричного числа в десятичную систему счисления нужно перейти к его развёрнутой записи, заменить буквы на соответствующие им цифры в десятичной системе счисления и вычислить значение получившегося выражения.
Наше число уже записано в развёрнутой форме. Нам осталось заменить буквы на соответствующие им десятичной системе числа и сосчитать. Ставим равно. Буква А соответствует числу 10 в десятичной системе счисления. Запишем число 10 и умножаем его на 162.

Ставим плюс и перепишем число 6, умноженное на 161.

Снова ставим плюс. Букве Е соответствует число 14 в десятичной системе счисления. Пишем число 14, умноженное на 160. Ставим равно.

Прежде, чем всё это сосчитать снова обратимся к математике и распишем степени числа шестнадцать.

162 ·10 = 2 560
Ставим плюс.
161 = 16.
161 · 6 = 96.
Снова ставим плюс.
160 = 1.
160 · 14 = 14.
Ставим равно.

Мы получили 2 670 в десятичной системе счисления.
Для перевода целого десятичного числа в шестнадцатеричную систему счисления следует последовательно выполнять деление данного числа и получаемых целых частных на 16 до тех пор, пока не получим частное, равное 0. В результате нужно записать в одну строку, справа налево все остатки, начиная с последнего, при необходимости, заменяя цифры на соответствующие им буквы в шестнадцатеричной системе счисления.
Переведём число 350 в шестнадцатеричную систему счисления.
Делим наше число на 16, получим 21, остаток 14. Выделим его.

Делим 21 на 16. Получим 1 и 5 в остатке. Обводим наш остаток.

1 больше 0. Делим 1 на 16, получим 0 и 1 в остатке. И снова выделяем остаток 1.

Теперь запишем все числа справа налево. Записываем следующие цифры: 1, 5.
35010 = 15.
Так как в шестнадцатеричной системе счисления числу 14 соответствует буква Е, то пишем её после 5.
35010 = 15E16.
Мы с вами перевели число 350 в шестнадцатеричную систему счисления.
Вы, наверное, заметили, что все правила перевода целого десятичного числа в любую систему счислению с другим основанием похожи.
Давайте изучим общее правило перевода целых десятичных чисел в любую систему счисления с основание q.
Для того, чтобы перевести целое десятичное число в систему счисления с основанием q нужно:
1. Последовательно выполнять деление данного числа и получаемых целых частных на основание новой системы счисления до тех пор, пока не получим частное, равное нулю.
2. Полученные остатки, которые являются цифрами числа в новой системе счисления, привести в соответствии с алфавитом новой системы счисления.
3. Составить число в новой системе счисления, записывая его, начиная с последнего полученного остатка.

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

Делим его на 2. Получим 123 и 1 в остатке. 123 запишем во вторую ячейку первой строки, а 1 – в первую ячейку второй строки.

Далее 123 разделить на 2 и получим 61 и 1 в остатке. 61 запишем после числа 123, а остаток один под число 123.

Далее 61 : 2 = 30 и остаток – 1. Запишем их в таблицу.

30 : 2 = 15, а остаток равен 0. Снова запишем их в таблицу в соответствующие ячейки.

При делении 15 на 2 получим 7 и 1 в остатке. Снова заполняем таблицу.

Далее 7 : 2 = 3 и 1 в остатке. Запишем в соответствующие ячейки наши числа.

3 :2 = 1 и 1 в остатке. Занесём данные в таблицу.

И делим 1 на 2, получим 0 и 1 в остатке. 0 писать не будет. Занесём только наш остаток в ячейку.

А теперь соберём все наши цифры в число в двоичной системе. Записываем их поочерёдно справа налево.
24710 = 111101112.
А сейчас переходим к переводу в восьмеричную систему счисления числа 247.
Делим 247 на 8. Получим 30 и 7 в остатке. Обведём остаток от деления.

Далее 30 делим на 8, получим 3 и 6 в остатке. Выделяем остаток.

3 делим на 8, получаем 0 и 3 в остатке. Обводим остаток.

Теперь запишем все остатки справа налево и получим число в восьмеричной системе счисления.
24710 = 3678.
Нам осталось перевести наше число в шестнадцатеричную систему счисления. Делим 247 на 16. Получим 15 и 7 в остатке. Обведём остаток.

Теперь делим 15 на 16, получим 0. А остаток от деления равен 15. Выделим его.

А сейчас запишем наши цифры справа налево в соответствии с алфавитом шестнадцатеричной системы счисления. Число 15 — это буква F в этой системе счисления. Ставим её на первое место. А затем пишем число 7.
24710 = F716
Задание выполнено. Давайте сравним все наши получившиеся числа.

Как можем видеть – все они одинаковые, но записаны разными цифрами, потому что они представлены в различных системах счисления. Это можно увидеть, если обратить внимание на основания чисел.
А теперь пришла пора довести итоги урока. Сегодня мы узнали, что такое восьмеричная и шестнадцатеричная системы счисления, какие действия нужно выполнить для перевода целого десятичного числа в систему счисления с основанием q.
Также мы сегодня научились переводить числа из восьмеричной и шестнадцатеричной систем счисления в десятичную и наоборот.