Системы счисления

Доминирующей системой счисления на сегодня является десятичная. Все измерения и расчеты люди производят в ней. Вероятно, так сложилось по причине того, что у человека 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.


Изменено: