====== Шестнадцатеричная система счисления ====== ====== Общая характеристика ====== Шестнадцатеричная система счисления - позиционная система счисления по основанию 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----| 255-------------|------FFh-----------|------1111 1111----| 128-------------|------80h-----------|------1000 0000----| 127-------------|------7Fh-----------|------0111 1111----| 80--------------|------50h-----------|------0101 0000----| 64--------------|------40h-----------|------0100 0000----| 32--------------|------20h-----------|------0010 0000----| 48--------------|------30h-----------|------0011 0000----| 16--------------|------10h-----------|------0001 0000----| 27--------------|------1B------------|------0001 1011----| 43--------------|------2B------------|------0010 1011----| 59--------------|------3B------------|------0011 1011----| 75--------------|------4B------------|------0100 1011----| 28--------------|------1C------------|------0001 1100----| 44--------------|------2C------------|------0010 1100----| 60--------------|------3C------------|------0011 1100----| 76--------------|------4C------------|------0100 1100----| 30--------------|------1E------------|------0001 1110----| 46--------------|------2E------------|------0010 1110----| 62--------------|------3E------------|------0011 1110----| 78--------------|------4E------------|------0100 1110----| 94--------------|------5E------------|------0101 1110----| 15--------------|------F-------------|------0000 1111----| 31--------------|------1F------------|------0001 1111----| 47--------------|------2F------------|------0010 1111----| 63--------------|------3F------------|------0011 1111----| 76--------------|------4F------------|------0100 1111----| 95--------------|------5F------------|------0101 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-----| ---------------------------------------------------------- ==== Арифметика чисел ==== | 10-x система | 16-x система | ---------------------------------------- | 20 | 10h + 4h = 14h | ---------------------------------------- | 28 | 20h - 4h = 1ch | ---------------------------------------- | 113 | 7h - E = 71 | ---------------------------------------- ====== Применение ====== Широко используется в низкоуровневом программировании и технической документации, поскольку в современных языках программирования и уровне микросхем минимальной адресуемой единицей памяти является 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 ====== Перевод в двоичную систему счисления ====== ====== Перевод в шестнадцатеричную систему счисления ====== ====== ====== ====== ====== ====== ======