
Шестнадцатеричная система счисления
Шестнадцатеричная система (позиционная система с основанием 16) широко используется для записи адресов и содержимого ячеек памяти компьютера. Ее алфавит содержит 16 цифр, вместе с 10 арабскими цифрами (0..9) используются первые буквы латинского алфавита:
A = 10, B = 11, C = 12, D = 13, E = 14 и F = 15.
Таким образом, старшая цифра – F.
Д
рис. 2.29
ля перевода чисел из десятичной системы в шестнадцатеричную используют алгоритм деления на 16 и взятия остатков. Важно не забыть, что все остатки, большие 9, нужно заменить на буквы:
Для обратного перехода значение каждой цифры умножают на 16 в степени, равной ее разряду, и полученные значения складывают:
разряды 2 1 0
1BC16 = 1162 + 11161 + 1280 = 256 + 176 + 12 =444.
Можно также использовать схему Горнера:
1BC16 = (116 + 11)16 + 12 = 2716 + 12 =444.
Основания двоичной и шестнадцатеричной систем связаны соотношением 24 = 16, поэтому можно переводить числа из шестнадцатеричной системы в двоичную напрямую. Алгоритмы перевода чисел из шестнадцатеричной системы в двоичную и обратно полностью аналогичны соответствующим алгоритмам для восьмеричной системы. Каждая шестнадцатеричная цифра представляется в виде тетрады (группы из четырех двоичных цифр):
0 |
0000 |
|
8 |
1000 |
1 |
0001 |
|
9 |
1001 |
2 |
0010 |
|
A (10) |
1010 |
3 |
0011 |
|
B (11) |
1011 |
4 |
0100 |
|
C (12) |
1100 |
5 |
0101 |
|
D (13) |
1101 |
6 |
0110 |
|
E (14) |
1110 |
7 |
0111 |
|
F (15) |
1111 |
Например, переведем в двоичную систему число 5E12316 (здесь показана разбивка на тетрады):
5E12316 = 101 1110 0001 0010 00112.
Обратите внимание, что для цифр, меньших 8 (кроме первой), результат перевода в двоичную систему нужно дополнить старшими нулями до 4 знаков.
Для перевода из двоичной системы в шестнадцатеричную нужно разбить число на тетрады, начиная справа, а затем каждую тетраду отдельно записать в виде одной шестнадцатеричной цифры:
10000100001010101111002 = 10 0001 0000 1010 1011 11002 = 210ABC16
Э
рис. 2.30
рис. 2.31
рис. 2.32
тот способ оказался очень удобен для записи значений ячеек памяти. Байт в современных компьютерах представляет собой 8 соседних бит, то есть две тетрады. Таким образом, значение байтовой ячейки можно записать как две шестнадцатеричные цифры:0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
5 |
E |
Каждый полубайт (4 бита) «упаковывается» в одну шестнадцатеричную цифру. Благодаря этому замечательному свойству, шестнадцатеричная система в сфере компьютерной техники практически полностью вытеснила восьмеричную.
Перевод из шестнадцатеричной системы в восьмеричную (и обратно) удобнее выполнять через двоичную систему. Можно, конечно, использовать и десятичную систему, но в этом случае объем вычислений будет значительно больше.
При выполнении сложения нужно помнить, что в системе с основанием 16 перенос появляется тогда, когда сумма в очередном разряде превышает 15. Удобно сначала переписать исходные числа, заменив все буквы на их численные значения:
При вычитании заем из старшего разряда равен 1016 = 16, а все «промежуточные» разряды заполняются цифрой F – старшей цифрой системы счисления.
Если нужно работать с числами, записанными в разных системах счисления, их сначала приводят к какой-нибудь одной системе. Например, требуется сложить 538 и 5616 и записать результат в двоичной системе счисления. Здесь можно выполнять сложение в двоичной, восьмеричной, десятичной или шестнадцатеричной системах. Переход к десятичной системе, а потом перевод результата в двоичную трудоемок. Практика показывает, что больше всего ошибок делается при вычислениях в двоичной системе, поэтому лучше выбирать восьмеричную или шестнадцатеричную систему. Например, переведем число 438 в шестнадцатеричную систему через двоичную:
538 = 101 0112 = 10 10112 = 2B16.
Теперь сложим:
2B16 + 5616 = 8116
и переведем результат в двоичную систему:
8116 = 1000 00012.