Различные системы счисления отличаются не только базовым набором чисел, но и основными концепциями, которые лежат в их основе. Взять, например, систему счисления, которая использовалась древними римлянами: она довольно трудна для восприятия, в ней очень сложно производить вычисления и невозможно представить 0. Данная система неудобна даже для человека, не говоря уж о том, чтобы научить компьютер «понимать» ее.
Десятичная система, которую мы используем всю жизнь, относится к классу так называемых позиционных систем, в которых число А может быть представлено в виде:
Здесь an — это цифры числа, a Z — основание системы счисления, в нашем лучае — 10.
При работе с различными системами счисления мы будем записывать само число в скобках, а за скобками — основание системы. Например, если написать просто число 1100, то не понятно, в какой системе оно записано — это может быть одна тысяча сто, а может быть 12, если число записано в двоичной системе. А если представить число в виде (1100)2, то сразу все становится на свои места: число записано в двоичной системе. Кстати, двоичная система тоже является позиционной, поэтому число 1100 в двоичной системе мы можем представить так:
(1100)2 = 1*23 + 1*22 + 0*21 + 0*20
После сложения 8+4 мы получим, что (1100)2 равно 12. Обратите внимание, что для представления числа 12 в двоичной системе использованы только четыре разряда.
Наибольшее число, которое можно записать четырьмя двоичными цифрами, равно 15, потому что (1111)2 = 1*8 + 1*4 + 1*2 + 1*1 = 15. Давайте рассмотрим первые 16 чисел:
Числа растут равномерно, и нетрудно предположить, что 16 будет представлено в двоичной системе как (10000)2.
Восьмеричная система счисления (по основанию 8) состоит из большего количества цифр — из восьми (от 0 до 7). Преобразование из этой системы в десятичную систему полностью аналогично преобразованию из двоичной системы, например:
(77)8 = 7*81 + 7*81 = 63
В шестнадцатеричной системе цифрами представлены только первые 10 чисел, а для представления остальных 5 чисел используются символы A-F:
А = 10, В = И, С = 12, D = 13, Е = 14, F = 15
Для шестнадцатеричной системы сохраняются те же принципы преобразования:
Итак, мы научились преобразовывать любое число, представленное в двоичной, восьмеричной и шестнадцатеричной системах, в десятичную систему.
А теперь займемся обратным преобразованием — из десятичной системы в систему с основанием n. Для обратного преобразования мы должны делить наше число на n и записывать остатки от деления до тех пор, пока частное от предыдущего деления не станет равно 0. Например, преобразуем 14 в двоичную систему:
14/2 = 7 остаток 0
7/2 = 3 остаток 1
3/2 = 1 остаток 1
1/2 = 0 остаток 1
Мы завершили процесс деления, когда последнее частное стало равно 0.
Теперь запишем все остатки подряд от последнего к первому, и мы получим
число в двоичной системе —• (1110)2.
Рассмотрим еще один пример — преобразование числа 13 в двоичную систему:
13/2 = 6 остаток 1
6/2 = 3 остаток 0
3/2 = 1 остаток 1
1/2 = 0 остаток 1
Как и в прошлом случае, мы делили до тех пор, пока частное не стало равно 0. Если записать остатки снизу вверх, мы получим двоичное число (1101)2.
А теперь потренируемся с шестнадцатеричной системой — преобразуем число 123456 в эту систему:
123456/16 = 7716 остаток 0
7716/16 = 482 остаток 4
482/16 = 30 остаток 2
30/16 = 1 остаток 14 = Е
1/16 = 0 остаток 1
После записи всех остатков получим, что число 123 456 = (lE240)16.
Запись со скобками и нижним индексом в тексте программы неудобна, поэтому мы будем использовать следующие обозначения для записи чисел в различных системах счисления:
• Запись шестнадцатеричного числа начинается с 0х или $0 либо заканчивается символом «h». Если первая цифра шестнадцатеричного числа — символ A-F, то перед таким числом нужно обязательно написать 0, чтобы компилятор понял, что перед ним число, а не идентификатор, например, 0DEADh.
Таким образом, записи 0x1234, $01234 и 01234h представляют число (1234)16.
• Десятичные числа могут записываться без изменений либо они заканчиваться постфиксом «d». Например, 1234 и 1234d представляют число (1234)10.
• Двоичные цифры должны заканчиваться постфиксом «b », например, 1100b —это (1100)2.
• Восьмеричные цифры заканчиваются на «q»: 12q — это (12)8.