
Восьмеричная и шестнадцатеричная системы счислений
Компьютерам очень удобно оперировать двоичными числами, но люди не привыкли работать с большим количеством цифр. Например, чтобы представить в двоичном виде число 1234 потребуется больше 10 двоичных цифр (10011010010). Поэтому были придуманы восьмеричная и шестнадцатеричная системы счислений. Они удобны как и десятичные числа тем, что для представления числа требуется меньшее количество разрядов. А по сравнению с десятичными числами, перевод в двоичное представление очень простой. Это как будто мы двоичное число разбили на группы по три или четыре разряда и каждой двоичной комбинации придумали значок.
Таблица для восьмеричных цифр:
Двоичная комбинация |
Знак |
000 |
0 |
001 |
1 |
010 |
2 |
011 |
3 |
100 |
4 |
101 |
5 |
110 |
6 |
111 |
7 |
Таблица 1
Таблица для шестнадцатеричных цифр:
Двоичная комбинация |
Знак |
0000 |
0 |
0001 |
1 |
0010 |
2 |
0011 |
3 |
0100 |
4 |
0101 |
5 |
0110 |
6 |
0111 |
7 |
1000 |
8 |
1001 |
9 |
1010 |
A |
1011 |
B |
1100 |
C |
1101 |
D |
1110 |
E |
1111 |
F |
Таблица 2
Перевод произвести очень просто, посмотрим на примере числа 10011010010.
Разбиваем его на группы по три цифры: 010 011 010 010. И по таблице переводим: 23228.
Чтобы перевести число в шестнадцатеричное представление разбиваем двоичное число на группы по четыре цифры: 0100 1101 0010. И по таблице переводим: 4D216.
В программистских кругах шестнадцатеричные числа принято предварять значком 0x (например, 0x4D2), такое написание пошло от языка программирования C, либо значком $ (например, $4D2), такая нотация произошла от языка программирования Pascal. Иногда в литературе используют буквы "h" и "b" для обозначения соответственно шестнадцатеричных и двоичных чисел (например, FFh или 1011b).
Перевод из одной системы счисления в другую
Наиболее часто встречающиеся системы счисления – это двоичная, шестнадцатеричная и десятичная. Как же связаны между собой представления числа в различных системах счисления? Есть различные способы перевода чисел из одной системы счисления в другую на конкретных примерах.
Пусть нужно перевести число 567 из десятичной в двоичную систему. Сначала определяется максимальная степень двойки, такая, чтобы два в этой степени было меньше или равно исходному числу. В данном случае это 9, т.к. 29 = 512, а 210 = 1024, что больше начального числа. Таким образом получается число разрядов результата, оно равно 9 + 1 = 10, поэтому результат будет иметь вид 1ххххххххх, где вместо х могут стоять любые двоичные цифры. Вторая цифра результата находится так – двойка возводится в степень 9 и вычитается из исходного числа: 567 – 29 = 55. Остаток сравнивается с числом 28 = 256. Так как 55 меньше 256, то девятый разряд – нуль, т.е. результат имеет вид 10хххххххх. Рассмотрим восьмой разряд. Так как 27 = 128 > 55, то и он будет нулевым.
Седьмой разряд также оказывается нулевым. Искомая двоичная запись числа принимает вид 1000хххххх. 25 = 32 < 55, поэтому шестой разряд равен 1 (результат 10001ххххх). Для остатка 55 – 32 = 23 справедливо неравенство 24 = 16 < 23, что означает равенство единице пятого разряда. Аналогично получается в результате число 1000110111. Это число разлагается по степеням двойки:
567 = 1·29 + 0·28 + 0·27 + 0·26 + 1·25 + 1·24 + 0·23 + 1·22 + 1·21 + 1·20
При другом способе перевода чисел используется операция деления в столбик. Если взять то же число 567 и разделить его на 2, получается частное 283 и остаток 1. Та же операция производится и с числом 283. Частное – 141, остаток – 1. Опять полученное частное делится на 2 и так до тех пор, пока частное не станет меньше делителя. Теперь, чтобы получить число в двоичной системе счисления, достаточно записать последнее частное, т.е. 1, и приписать к нему в обратном порядке все полученные в процессе деления остатки.
Рис. 1
Результат, естественно, не изменился: 567 в двоичной системе счисления записывается как 1 000 110 111.
Эти два способа применимы при переводе числа из десятичной системы в систему с любым основанием. Например, при переводе числа 567 в систему счисления с основанием 16 число сначала разлагается по степеням основания. Искомое число состоит из трех цифр, т.к. 162 = 256 < 567 < 163 = 4096. Определяется цифра старшего разряда. 2·162 = 512 < 567 < 3·162 = 768, следовательно, искомое число имеет вид 2хх, где вместо х могут стоять любые шестнадцатеричные цифры. Остается распределить по следующим разрядам число 55 (567 – 512). 3·16 = 48 < 55 < 4·16 = 64, значит во втором разряде находится цифра 3. Последняя цифра равна 7 (55 – 48). Искомое шестнадцатеричное число равно 237.
Второй способ состоит в последовательном делении в столбик, с единственным отличием в том, что делить надо не на 2, а на 16, и процесс деления заканчивается, когда частное становится строго меньше 16.
Рис. 2
Конечно, для записи числа в шестнадцатеричной системе счисления, необходимо заменить 10 на A, 11 на B и так далее.
Операция перевода в десятичную систему выглядит гораздо проще, так как любое десятичное число можно представить в виде x = a0·pn + a1·pn–1 +... + an–1·p1 + an·p0, где a0 ... an – это цифры данного числа в системе счисления с основанием p.
Например, так можно перевести число 4A3F в десятичную систему. По определению, 4A3F= 4·163 + A·162 + 3·16 + F. При замене A на 10, а F на 15, получается 4·163 + 10·162 + 3·16 + 15= 19007.
Проще всего переводить числа из двоичной системы в системы с основанием, равным степеням двойки (8 и 16), и наоборот. Для того чтобы целое двоичное число записать в системе счисления с основанием 2n, нужно данное двоичное число разбить справа налево на группы по n-цифр в каждой; если в последней левой группе окажется меньше n разрядов, то дополнить ее нулями до нужного числа разрядов; рассмотреть каждую группу, как n-разрядное двоичное число, и заменить ее соответствующей цифрой в системе счисления с основанием 2n.