reverseenengineering:16-система

Это старая версия документа!


Шестнадцатеричная система счисления

Общая характеристика

Шестнадцатеричная система счисления - позиционная система счисления по основанию 16.

Основание: 16
Алфавит: 0, 1, 2, 3, 4, 5, 6, 7, 8,9, A(10), B(11), C(12), D(13), E(14), F(15).
В качестве цифр этой системы счисления обычно используются цифры от 0 до 9 и латинские буквы от A до F. Буквы A, B, C, D, E, F имеют значения 1010, 1110, 1210, 1310, 1410, 1510 соответственно.
Пример шестнадцатеричного числа: 1A45F0D (1A45F0D16 = 27 549 45310).
В данной системе, как видно из названия, есть шестнадцать цифр от 0 до F. Поскольку цифр здесь больше десяти, то решили использовать буквы, чтобы избежать путаницы в числах.
ВАЖНАЯ РЕМАРКА ОТ АВТОРА: Стоит упомянуть что на самом низком уровне «машины»(смартфоны, приложения, ПК, серверы, сетевые и пользовательские программы, сетевые протоколы и т.д.) используют в своей работе именно бинарный код или иными словами двоичную системы счисления. А вот при работе с адресами, стеками и регистрами такие низкоуровневые языки как Assembler используют как раз 16-тиричную систему счисления при реализации инструкций(кода).
Двоичная система счисления - позиционная система счисления с основанием 2. Благодаря непосредственной реализации в цифровых электронных схемах на логических вентилях, двоичная система используется практически во всех современных компьютерах и прочих вычислительных электронных устройствах.
   0      1        2       3       4       5       6       7       8       9
 ---------------------------------------------------------------------------->

Во избежание дальнейшей перегрузки в «длине» записи чисел в отличии от общепринятой десятичной системы счисления, после перехода к числу (10) применяется буквенное обозначение чисел.

 A(10)   B(11)   C(12)   D(13)   E(14)   F(15)
 --------------------------------------------->
 10-x система    |   16-x система     |    2-x система
 ----------------------------------------------------------
                 ^                    ^
 256-------------|------100h----------|-----10000 0000----|
 128-------------|------80h-----------|------1000 0000----|
 64--------------|------40h-----------|------0100 0000----|
 32--------------|------20h-----------|------0010 0000----|
 16--------------|------10h-----------|------0001 0000----|
 255-------------|------FFh-----------|------1111 1111----|
 127-------------|------7Fh-----------|------0111 1111----|
                 ^                    ^
                 
 10-x система    |   16-x система     |    2-x система
 ----------------------------------------------------------
 10--------------|---A----------------|----1010 
 11--------------|---B----------------|----1011
 12--------------|---C----------------|----1100
 13--------------|---D----------------|----1101
 14--------------|---E----------------|----1110
 15--------------|---F----------------|----1111
 64--------------|---40h--------------|----0100 0000
 127-------------|---7Fh--------------|----0111 1111
 256-------------|---100h-------------|----10000 0000
 ----------------------------------------------------------

Применение

Широко используется в низкоуровневом программировании и технической документации, поскольку в современных языках программирования и уровне микросхем минимальной адресуемой единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами, а значение половины байта — полубайта — одной цифрой. Ранее это делалось восьмеричной системой счисления, но количество разрядов было больше. Данная система очень полезна при разработке цифрового продукта и программировании. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему.

В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями).

Шестнадцатеричный цвет — запись трёх компонентов цвета (R, G и B) в шестнадцатеричном виде. Например, цвет, имеющий шестнадцатеричный номер 00FF00, — ярко-зелёный.

  • В Ада и 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
 0hex	=	0dec	=	0oct		0	0	0	0

 1hex	=	1dec	=	1oct		0	0	0	1
 
 2hex	=	2dec	=	2oct		0	0	1	0

 3hex	=	3dec	=	3oct		0	0	1	1

 4hex	=	4dec	=	4oct		0	1	0	0

 5hex	=	5dec	=	5oct		0	1	0	1

 6hex	=	6dec	=	6oct		0	1	1	0

 7hex	=	7dec	=	7oct		0	1	1	1

 8hex	=	8dec	=	10oct		1	0	0	0

 9hex	=	9dec	=	11oct		1	0	0	1

 Ahex	=	10dec	=	12oct		1	0	1	0

 Bhex	=	11dec	=	13oct		1	0	1	1

 Chex	=	12dec	=	14oct		1	1	0	0

 Dhex	=	13dec	=	15oct		1	1	0	1

 Ehex	=	14dec	=	16oct		1	1	1	0

 Fhex	=	15dec	=	17oct		1	1	1	1

Перевод в двоичную систему счисления

Перевод в шестнадцатеричную систему счисления

  • reverseenengineering/16-система.1750761088.txt.gz
  • Последнее изменение: 2025/06/24 17:31
  • Lex