Системы счисления в культуре
Индо-арабская
Арабская
Тамильская
Бирманская
Кхмерская
Лаосская
Монгольская
Тайская
Восточноазиатские
Китайская
Японская
Сучжоу
Корейская
Вьетнамская
Счётные палочки
Алфавитные
Абджадия
Армянская
Ариабхата
Кириллическая
Греческая
Грузинская
Эфиопская
Еврейская
Акшара-санкхья
Другие
Вавилонская
Египетская
Этрусская
Римская
Дунайская
Аттическая
Кипу
Майяская
Эгейская
Символы КППУ
Позиционные
2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 60
Нега-позиционная
Симметричная
Смешанные системы
Фибоначчиева
Непозиционные
Единичная (унарная)

Шестнадцатеричная система счисления — позиционная система счисления по целочисленному основанию 16. В качестве цифр этой системы счисления обычно используются цифры от 0 до 9 и латинские буквы от A до F. Буквы A, B, C, D, E, F имеют значения 1010, 1110, 1210, 1310, 1410, 1510 соответственно.

Содержание

Применение [ править | править код ]

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

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

Шестнадцатеричный цвет — запись трёх компонентов цвета (R, G и B) в шестнадцатеричном виде.

Способы записи [ править | править код ]

В математике [ править | править код ]

В математике основание системы счисления принято указывать в десятичной системе в нижнем индексе. Например, десятичное число 1443 можно записать как 144310 или как 5A316.

В языках программирования [ править | править код ]

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

  • В Ада и VHDL такие числа указывают так: «16#5A3#».
  • В Си и языках схожего синтаксиса, например, в Java, используют префикс «0x». Например, «0x5A3».
  • В некоторых языках ассемблера используют букву «h», которую ставят после числа. Например, «5A3h». При этом, если число начинается не с десятичной цифры, то для отличия от имён идентификаторов (например, констант) впереди ставится «0» (ноль): «0FFh» (25510)
  • Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бейсика используют префикс «$». Например, «$5A3».
  • В ассемблерах для IBM mainframe (Assembler F, Assembler 2, Assembler H) используется запись X’xx..xx’. Например X’05A3′.
  • Некоторые иные платформы, например ZX Spectrum в своих ассемблерах (MASM, TASM, ALASM, GENS и т. д.) использовали запись #5A3, обычно выровненную до одного или двух байт: #05A3.
  • Другие версии Бейсика, например Turbo Basic, используют для указания шестнадцатеричных цифр сочетание «&h» или «&H» перед числом. Например, «&h5A3».
  • В Unix-подобных операционных системах (и многих языках программирования, имеющих корни в Unix/linux) непечатные символы при выводе/вводе кодируются как 0xCC, где CC — шестнадцатеричный код символа.

Перевод чисел из одной системы счисления в другую [ править | править код ]

Перевод чисел из шестнадцатеричной системы в десятичную [ править | править код ]

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

Например, требуется перевести шестнадцатеричное число 3A5 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

3A516 = 3·16 2 +10·16 1 +5·16 0 =
= 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

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

В шестнадцатеричной системе счисления используются цифры от 0 до 9 и шесть первых латинских букв – A (10), B (11), C (12), D (13), E (14), F (15).

При переводе двоичного числа в шестнадцатеричное, первое разбивается на группы по четыре разряда, начиная с конца. В случае, если количество разрядов не делится нацело, то первая четверка дописывается нулями впереди. Каждой четверке соответствует цифра шестнадцатеричной системе счисления:

Например:
10001100101 = 0100 1100 0101 = 4 C 5 = 4C5

Если потребуется, то число 4C5 можно перевести в десятичную систему счисления следующим образом (C следует заменить на соответствующее данному символу число в десятичной системе счисления – это 12):

4C5 = 4 * 16 2 + 12 * 16 1 + 5 * 16 0 = 4 * 256 + 192 + 5 = 1221

Максимальное двухразрядное число, которое можно получить с помощью шестнадцатеричной записи — это FF.

FF = 15 * 16 1 + 15 * 16 0 = 240 + 15 = 255

255 – это максимальное значение одного байта, равного 8 битам: 1111 1111 = FF. Поэтому с помощью шестнадцатеричной системы счисления очень удобно кратко (с помощью двух цифр-знаков) записывать значения байтов. Внимание! Состояний у 8-ми битного байта может быть 256, однако максимальное значение – 255. Не забывайте про 0 – это как раз 256-е состояние.

Система счисления – это способ записи чисел. Обычно, числа записываются с помощью специальных знаков – цифр (хотя и не всегда). Если вы никогда не изучали данный вопрос, то, по крайней мере, вам должны быть известны две системы счисления – это арабская и римская. В первой используются цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и это позиционная система счисления. А во второй – I, V, X, L, C, D, M и это непозиционная система счисления.

В позиционных системах счисления количество, обозначаемое цифрой в числе, зависит от ее позиции, а в непозиционных – нет. Например:

11 – здесь первая единица обозначает десять, а вторая – 1.
II – здесь обе единицы обозначают единицу.

345, 259, 521 – здесь цифра 5 в первом случае обозначает 5, во втором – 50, а в третьем – 500.

XXV, XVI, VII – здесь, где бы ни стояла цифра V, она везде обозначает пять единиц. Другими словами, величина, обозначаемая знаком V, не зависит от его позиции.

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

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

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

Основание системы счисления – это количество знаков, которое используется для записи цифр.

Разряд — это позиция цифры в числе. Разрядность числа — количество цифр, из которых состоит число (например, 264 — трехразрядное число, 00010101 — восьмиразрядное число). Разряды нумеруются справа на лево (например, в числе 598 восьмерка занимает первый разряд, а пятерка — третий).

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

Одно и тоже число (значение) можно представить в различных системах счисления. Представление числа при этом различно, а значение остается неизменным.

Двоичная система счисления

В двоичной системе счисления используются всего две цифры 0 и 1. Другими словами, двойка является основанием двоичной системы счисления. (Аналогично у десятичной системы основание 10.)

Чтобы научиться понимать числа в двоичной системе счисления, сначала рассмотрим, как формируются числа в привычной для нас десятичной системе счисления.

В десятичной системе счисления мы располагаем десятью знаками-цифрами (от 0 до 9). Когда счет достигает 9, то вводится новый разряд (десятки), а единицы обнуляются и счет начинается снова. После 19 разряд десятков увеличивается на 1, а единицы снова обнуляются. И так далее. Когда десятки доходят до 9, то потом появляется третий разряд – сотни.

Двоичная система счисления аналогична десятичной за исключением того, что в формировании числа участвуют всего лишь две знака-цифры: 0 и 1. Как только разряд достигает своего предела (т.е. единицы), появляется новый разряд, а старый обнуляется.

Попробуем считать в двоичной системе:
0 – это ноль
1 – это один (и это предел разряда)
10 – это два
11 – это три (и это снова предел)
100 – это четыре
101 – пять
110 – шесть
111 – семь и т.д.
Перевод чисел из двоичной системы счисления в десятичную

Не трудно заметить, что в двоичной системе счисления длины чисел с увеличением значения растут быстрыми темпами. Как определить, что значит вот это: 10001001? Непривычный к такой форме записи чисел человеческий мозг обычно не может понять сколько это. Неплохо бы уметь переводить двоичные числа в десятичные.

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

1476 = 1000 + 400 + 70 + 6

Можно пойти еще дальше и разложить так:

1476 = 1 * 103 + 4 * 102 + 7 * 101 + 6 * 100

Посмотрите на эту запись внимательно. Здесь цифры 1, 4, 7 и 6 — это набор цифр из которых состоит число 1476. Все эти цифры поочередно умножаются на десять возведенную в ту или иную степень. Десять – это основание десятичной системы счисления. Степень, в которую возводится десятка – это разряд цифры за минусом единицы.

Аналогично можно разложить и любое двоичное число. Только основание здесь будет 2:

10001001 = 1*2 7 + 0*2 6 + 0*2 5 + 0*2 4 + 1*2 3 + 0*2 2 + 0*2 1 + 1*2 0

Если посчитать сумму составляющих, то в итоге мы получим десятичное число, соответствующее 10001001:

1*2 7 + 0*2 6 + 0*2 5 + 0*2 4 + 1*2 3 + 0*2 2 + 0*2 1 + 1*2 0 = 128 + 0 + 0 + 0 + 8 + 0 + 0 + 1 = 137

Т.е. число 10001001 по основанию 2 равно числу 137 по основанию 10. Записать это можно так:

100010012 = 13710
Почему двоичная система счисления так распространена?

Дело в том, что двоичная система счисления – это язык вычислительной техники. Каждая цифра должна быть как-то представлена на физическом носителе. Если это десятичная система, то придется создать такое устройство, которое может быть в десяти состояниях. Это сложно. Проще изготовить физический элемент, который может быть лишь в двух состояниях (например, есть ток или нет тока). Это одна из основных причин, почему двоичной системе счисления уделяется столько внимания.
Перевод десятичного числа в двоичное

Может потребоваться перевести десятичное число в двоичное. Один из способов – это деление на два и формирование двоичного числа из остатков. Например, нужно получить из числа 77 его двоичную запись:

77 / 2 = 38 (1 остаток)
38 / 2 = 19 (0 остаток)
19 / 2 = 9 (1 остаток)
9 / 2 = 4 (1 остаток)
4 / 2 = 2 (0 остаток)
2 / 2 = 1 (0 остаток)
1 / 2 = 0 (1 остаток)

Собираем остатки вместе, начиная с конца: 1001101. Это и есть число 77 в двоичном представлении. Проверим:

1001101 = 1*2 6 + 0*2 5 + 0*2 4 + 1*2 3 + 1*2 2 + 0*2 1 + 1*2 0 = 64 + 0 + 0 + 8 + 4 + 0 + 1 = 77

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

Итак, современное «железо понимает» лишь двоичную систему счисления. Однако человеку трудно воспринимать длинные записи нулей и единиц с одной стороны, а с другой – переводит числа из двоичной в десятичную систему и обратно, достаточно долго и трудоемко. В результате, часто программисты используют другие системы счисления: восьмеричную и шестнадцатеричную. И 8 и 16 являются степенями двойки, и преобразовывать двоичное число в них (так же как и выполнять обратную операцию) очень легко.

В восьмеричной системе счисления используется восемь знаков-цифр (от 0 до 7). Каждой цифре соответствуют набор из трех цифр в двоичной системе счисления:

000 – 0
001 – 1
010 – 2
011 – 3
100 – 4
101 – 5
110 – 6
111 – 7

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

1011101 = 1 011 101 = 001 011 101 = 1 3 5 = 135

Т.е число 1011101 в двоичной системе счисления равно числу 135 в восьмеричной системе счисления. Или 10111012 = 1358.

Обратный перевод. Допустим, требуется перевести число 1008 (не заблуждайтесь! 100 в восьмеричной системе – это не 100 в десятичной) в двоичную систему счисления.

1008 = 1 0 0 = 001 000 000 = 001000000 = 10000002

Перевод восьмеричного числа в десятичное можно осуществить по уже знакомой схеме:

6728 = 6 * 8 2 + 7 * 8 1 + 2 * 8 0 = 6 * 64 + 56 + 2 = 384 + 56 + 2 = 44210
1008 = 1 * 8 2 + 0 * 8 1 + 0 * 8 0 = 6410

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

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

В шестнадцатеричной системе счисления используются цифры от 0 до 9 и шесть первых латинских букв – A (10), B (11), C (12), D (13), E (14), F (15).

При переводе двоичного числа в шестнадцатеричное, первое разбивается на группы по четыре разряда, начиная с конца. В случае, если количество разрядов не делится нацело, то первая четверка дописывается нулями впереди. Каждой четверке соответствует цифра шестнадцатеричной системе счисления:

Например:
10001100101 = 0100 1100 0101 = 4 C 5 = 4C5

Если потребуется, то число 4C5 можно перевести в десятичную систему счисления следующим образом (C следует заменить на соответствующее данному символу число в десятичной системе счисления – это 12):

4C5 = 4 * 162 + 12 * 161 + 5 * 160 = 4 * 256 + 192 + 5 = 1221

Максимальное двухразрядное число, которое можно получить с помощью шестнадцатеричной записи — это FF.

FF = 15 * 161 + 15 * 160 = 240 + 15 = 255

255 – это максимальное значение одного байта, равного 8 битам: 1111 1111 = FF. Поэтому с помощью шестнадцатеричной системы счисления очень удобно кратко (с помощью двух цифр-знаков) записывать значения байтов. Внимание! Состояний у 8-ми битного байта может быть 256, однако максимальное значение – 255. Не забывайте про 0 – это как раз 256-е состояние