Системы счисления
Доминирующей системой счисления на сегодня является десятичная. Все измерения и расчеты люди производят в ней. Вероятно, так сложилось по причине того, что у человека 10 пальцев на руках. Однако Шумерская цивилизация пользовалась двенадцатеричной системой счисления (ровно 12 фаланг на мизинце, безымянном, среднем и указательном пальцах одной руки). И при всей кажущейся очевидности превосходства десятичной системы всё не так однозначно — переход на двенадцатеричную систему предлагался неоднократно. Во время Великой французской революции была учреждена специальная комиссия по весам и мерам, где довольно долго рассматривали данную идею. Десятичную систему отстоял Лагранж и некоторые другие ученые.
Посмотрите ролик на youtube.com «Base 12» с канала Numberphile (существует перевод видео под названием «Двенадцатеричная система», канал Mad Astronomer) — там математик рассказывает о преимуществах двенадцатеричной системы счисления.
Система счисления не более чем инструмент. В разных областях одна будет удобнее другой. В цифровой технике используется двоичная система, так как она лучше отображает поведение — грубо говоря, когда некоторый вентиль закрыт, то это 0
, а когда он открыт, то 1
. Для удобства отображения и краткости записи часто применяют шестнадцатеричную систему счисления. Рассмотрим их все подробнее.
Десятичная система счисления
Люди не «цифровые», и десятичная (англ. decimal) система счисления нам более привычна и понятна. Алфавит такой системы включает десять цифр — { 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
}, а основание равно 10. Основание позволяет нам разложить число в ряд. Так, число 256 можно записать следующим образом:
2 · 102 + 5 · 101 + 6 · 100 = 200 + 50 + 6 = 256
Дробные числа можно расписать по тому же принципу. Например, число 2,56:
2 · 100 + 5 · 10-1 + 6 · 10-2 = 2 + 0.5 + 0.06 = 2,56
В научной литературе часто прибегают к сокращенной, экспоненциальной, форме записи:
1,030,000 = 1,03 · 106 = 1,03e6
Идея экспоненциальной записи нашла применение в представлении вещественных чисел в цифровой технике, но об этом чуть позже.
Двоичная система счисления
По аналогии, система счисления, понятная для цифровой техники, имеет алфавит { 0
, 1
} и основание 2. Допустим, имеется число в двоичной системе счисления (англ. binary) — 10102. Переведем его в десятичную систему.
10102 = 130211002 = 1 · 23 + 0 · 22 + 1 · 21 + 0 · 20 = 8 + 0 + 2 + 0 = 1010
Забегая вперед, отметим, что некоторые компиляторы языка Си (такие как GCC) поддерживают префикс 0b
для записи в бинарной системе счисления, например: 0b1010
= 1010. Мы уже использовали такую форму записи в предыдущей главе.
Шестнадцатеричная система счисления
Представлять числа в двоичной системе для человека неудобно — для одного 32-битного слова потребуется записать 32 символа. Запомнить при этом какое-нибудь константное значение становится проблематично. Для улучшения восприятия часто используется шестнадцатеричная система (англ. hexadecimal). Ее алфавит состоит из { 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, A
, B
, C
, D
, E
, F
}, а основание равно 16. Так как само основание кратно двойке, то преобразование не вызывает затруднений. Один байт информации можно представить в виде двух символов.
111111112 = FF16
Опять же, забегая вперед, в языке Си вы можете использовать специальный префикс 0x
для того, чтобы обозначить шестнадцатеричную систему.
Восьмеричная система счисления
Иногда можно встретить восьмеричную (англ. octal) систему счисления, с алфавитом { 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
} и основанием 8. Не стоит для «красивости» кода добавлять нули перед числом — компилятор воспримет его как восьмеричное, а не десятичное, т.е. 45 ≠ 045.