Система счисления — это способ, которым записывают и представляют числа. Самая распространенная в нашем обществе — десятичная система, в которой используют цифры от 0 до 9. Но есть и другие системы счисления, их чаще всего используют в информатике и программировании.
У большинства используемых систем счисления есть основание. Так называют число, на котором начинается другой разряд. Например, для десятичной системы это число 10 — первое, которое начинают записывать двумя цифрами, а не одной. Потом разряд меняется на числе 100 — десять десяток. И так далее.
Примеры записи чисел в разных системах
Еще у систем счисления есть алфавит — набор цифр, которые используют в той или иной системе. В той же привычной нам десятичной системе алфавит состоит из цифр от 0 до 9, а дальше уже приходится комбинировать несколько цифр. У систем с бо́льшим основанием алфавит может быть более длинным, поэтому для «дополнительных» цифр придумывают новые обозначения. Например, в шестнадцатеричной системе наравне с привычными цифрами используют буквы от A до F.
Алфавиты систем счисления
Считается, что десятичная система стала основной, потому что в древности люди для подсчета предметов загибали пальцы. Пальцев у человека десять, и это стало удобной основой — люди стали считать вещи десятками.
Зачем нужны системы счисления
По сути, система счисления — это просто способ, которым записывают число. Одно и то же число в разных системах может выглядеть по-разному, но при этом его суть останется прежней.
Например, в десятичной системе счисления число выглядит как 20. В шестнадцатеричной — как 14. А в римской записи — как XX. Да, римская запись чисел — тоже система счисления.
Изначально разные системы счисления появились в разных обществах в зависимости от их особенностей — те же римские и арабские цифры. В современном мире назначение у них немного другое. Дело в том, что люди привыкли мыслить десятками, а вот компьютеры — нет. Компьютеры изначально воспринимают числа в двоичной системе счисления, в которой существует только две цифры: 0 и 1. Всё, что больше единицы, уже считается числом из двух и более разрядов.
Для десятичной системы числовой ряд выглядит так: 0, 1, 2, 3, 4, 5, 6… А для двоичной — так: 0, 1, 10, 11, 100, 101, 110… Позже мы разберем, как это работает.
Еще для компьютеров удобны восьмеричная и шестнадцатеричная системы счисления, основания которых — 8 и 16 соответственно. Реже применяются другие системы: троичная, шестеричная, двенадцатеричная и так далее.
Кто и для чего использует системы счисления
Для компьютеров двоичная, шестнадцатеричная и другие системы счисления естественнее, чем десятичная. Поэтому и людям иногда приходится пользоваться ими при работе с вычислительной техникой. Вот несколько примеров:
- цвета в формате RGB описывают числами в шестнадцатеричной системе. Например, белый — это #FFFFFF, а черный — #000000. Да, F в этом случае — тоже цифра;
- символы в разных кодировках, например ASCII или UTF-8, тоже описывают числами в шестнадцатеричном формате. Иногда их же представляют в виде двоичных чисел;
- в некоторых языках программирования, особенно в низкоуровневых вроде ассемблера, приходится работать с данными на уровне бит и байт — а способы хранения данных тесно связаны с двоичной и восьмеричной системами счисления.
Разработчики, которые имеют дело только с высокоуровневыми языками вроде JavaScript, как правило, редко сталкиваются с системами счисления. Но понимать, как они устроены, айтишнику всё равно нужно — чтобы лучше разбираться в том, как функционируют компьютеры.
Позиционные и непозиционные системы счисления
Системы счисления делятся на две большие группы: позиционные и непозиционные. Расскажем, что это значит и чем они различаются.
Непозиционные. Так называют системы, в которых не важна позиция цифры в числе. Где бы цифра ни находилась, она всегда имеет одно и то же значение. Самый яркий пример — унарная система счисления, она же единичная. Ее даже иногда выделяют в отдельный вид. В ней существует только одна цифра — 1. Поэтому, например, число 5 будет записываться как 11111. Если поменять единицы местами — ничего не изменится.
Непозиционные системы счисления считаются самыми древними. Они возникли, когда люди впервые начали что-то подсчитывать и использовали для этого палочки, узелки или собственные пальцы. Позже они начали «группировать» цифры в числа, и возникли позиционные системы счисления.
Второй пример непозиционной системы, менее очевидный, — римская запись. Символ X всегда будет означать десятку, а символ V — пятерку, в каком бы месте их ни поставили. Даже в числах вроде IV, где I перед V означает «-1», I всё равно будет единицей, а V — пятеркой. От положения цифры зависит только ее знак, но не ее вес.
Непозиционные системы используются редко. В них нет нуля, нет дробных чисел и других инструментов, которые бывают важны в современных вычислениях.
Позиционные. Сюда относятся десятичная, двоичная и большинство других современных систем счисления. В таких системах есть разряды, зависящие от позиции. Значение цифры меняется в зависимости от того, в каком месте она находится. Например, в числе 15 пятерка означает «пять единиц», а в числе 54 — «пять десятков».
Двоичная, восьмеричная и шестнадцатеричная система тоже позиционные. В целом такие системы используют чаще, чем непозиционные, за исключением некоторых узких сфер. Например, в некоторых комбинаторных расчетах используют непозиционную биномиальную систему — она основана на биноме Ньютона.
Позиционные системы счисления в свою очередь делятся на две категории — однородные и смешанные.
- Однородные системы — такие, в которых правила записи одинаковые для всех разрядов. В каждом разряде можно использовать один и тот же алфавит. Десятичная система именно такая. И в единицах, и в десятках, и в сотнях или тысячах мы пользуемся цифрами от 0 до 9.
- Смешанные системы — такие, где у разных разрядов различаются правила записи или даже основание. Например, система подсчета времени. У разряда «минуты» основание 60, и минуты можно обозначать числами от 0 до 59. На 60 число переходит в разряд «часы». А у разряда «часы» основание 24, и количество часов можно обозначать цифрами от 0 до 23. На 24 число переходит в разряд «сутки». И так далее.
Смешанные системы используют реже, чем однородные — исключением можно назвать разве что подсчет времени. Но, например, смешанной системой считается факториальная: 2! — это 2, 3! — уже 6, а 4! — 24. Видно, что основание меняется, а сама система нелинейная.
Распространенные системы счисления в информатике
Практически все системы, которые используют в компьютерной технике, — позиционные и однородные. Как правило, у них четное основание, которое соответствует какой-либо из степеней двойки. Это связано с особенностями хранения данных в памяти компьютера. Рассмотрим три наиболее популярных в информатике системы счисления: двоичную, восьмеричную и шестнадцатеричную.
Двоичная. Это система с основанием 2 и алфавитом, который состоит всего из двух цифр — 0 и 1. Необходимость использовать двоичную систему появилась из-за того, как компьютеры представляют информацию: в виде бит. Бит может принимать только значение «0» или «1» — «тут нет единицы информации» или «тут есть единица информации».
- 0 означает ноль, отсутствие информации.
- 1 означает единицу, например записанную в какую-то ячейку памяти.
- Цифры 2 в системе нет. Если число достигает значения 2, оно переходит в другой разряд и записывается как 10 — одна двойка и ноль единиц. Соответственно, число 3 будет записываться как 11 — одна двойка и одна единица.
- Дальше разряды увеличиваются по тому же принципу. Число 4 — это 100, то есть две двойки и 0 единиц. Число 8 — 1000, и так далее. Каждая новая степень двойки — новый разряд.
Напрямую работать с двоичным, или бинарным кодом разработчикам приходится редко. Но для общего понимания важно знать, как устроена двоичная система. Именно в таком виде на самом глубоком уровне хранятся данные в компьютере — как последовательности из нулей и единиц.
Восьмеричная. Эту систему используют чуть реже, чем двоичную и шестнадцатеричную. Чаще всего ее упоминание можно встретить при работе с низкоуровневыми языками программирования, которые близки к «железу» и способны обрабатывать данные напрямую. Компьютеры объединяют части бинарного кода в блоки по 8 двоичных цифр — байты. Отсюда появилась и необходимость работать с восьмеричной системой.
- Основа системы счисления — 8. Это значит, что от 0 до 7 цифры идут как обычно, а когда число доходит до 8, начинается другой разряд и число записывается как 10.
- Соответственно, число 9 будет записываться как 11, а число 10 — как 12.
- Число 16 в восьмеричной системе записывается как 20, потому что шестнадцать — это два раза по восемь. И так далее.
- Число 64 в восьмеричной системе будет выглядеть как 100, потому что это восемь раз по восемь.
Шестнадцатеричная. С этой системой счисления сталкиваются не только разработчики, но и, например, дизайнеры — в ней кодируются цвета RGB. Еще в этой системе записываются коды символов во многих кодировках. Основание шестнадцатеричной системы — число 16. Оно больше десяти, поэтому в алфавите появляются дополнительные цифры, которые обозначают буквами.
- От 0 до 9 цифры идут как обычно. Но на десяти разряд еще не меняется, поэтому для обозначения десятки нужна новая цифра. В качестве этой «цифры» используют латинскую букву A.
- Соответственно, «цифра» 11 — это B, 12 — C, и так далее до F, которая обозначает «цифру» 15.
- Когда счет доходит до шестнадцати, разряд меняется. Следующее число после F в шестнадцатеричной системе — 10.
- Числа в шестнадцатеричной системе выглядят меньше, чем в десятичной. Например, 100 в шестнадцатеричной системе — это 16 раз по 16, то есть 16 в квадрате. В десятичной системе это число 256.
- Цифры в виде букв могут встречаться в начале, конце или середине числа. Например, 1A — это 26. Единица обозначает один раз по шестнадцать, а A — «цифру» десять.
Перевод чисел из одной системы счисления в другую
Иногда число в одной системе счисления нужно представить в другой. Для этого используют специальные алгоритмы, чтобы упростить задачу и не высчитывать разряды вручную.
Перевод из десятичной системы в другую. Алгоритм такой: нужно шаг за шагом делить число в десятичной системе на основание той системы, в которую мы его переводим. Это делается до тех пор, пока исходное число не станет равным 0. Остаток от деления — это цифра в новом числе. Остатки записывают начиная с последнего и заканчивая первым и так получают число в нужной системе счисления.
Например, число 13 в десятичной системе мы хотим перевести в двоичную.
- Мы делим 13 на 2 — получаем 6, остаток 1.
- Потом делим 6 на 2 — получаем 3, остаток 0.
- Потом делим 3 на 2 — получаем 1, остаток 1.
- Потом делим 1 на 2 — получаем 0, остаток 1.
- Исходное число стало равным нулю — значит, мы закончили. Теперь записываем остатки в обратном порядке: 1, 1, 0, 1. Выходит число в двоичной системе — 1101.
Перевод из любой системы в десятичную. Тут способ немного более запутанный, но на самом деле несложный. Нужно взять число в нужной системе счисления и пронумеровать его разряды с конца, начиная с 0. Самая последняя цифра — нулевой разряд, вторая с конца — первый разряд, и так далее. Затем каждую из цифр нужно умножить на основание системы счисления, которое предварительно возвели в степень номера разряда. Полученные числа нужно сложить.
Например, есть число 93 в шестнадцатеричной системе счисления. Мы хотим перевести его в десятичную.
- Нумеруем разряды числа. У цифры 9 номер 1, у цифры 3 номер 0.
- Основание системы — 16. 16 в первой степени — это 16, а 16 в нулевой степени — это 1.
- Цифру 9 мы умножаем на 16, а цифру 3 — на 1. Получаем числа 144 и 3.
- Складываем 144 и 3, получаем число 147 в десятичной системе счисления.
Перевод в восьмеричную систему счисления. Начиная с правого конца, делим двоичное число на триады: на группы по 3 цифры. Добавляем слева недостающие нули, чтобы все группы были трехзначными.
Затем заменяем каждую триаду на соответствующую восьмеричную цифру: в этом поможет таблица соответствия между триадами и восьмеричными цифрами.
Записываем полученные восьмеричные цифры слева направо — итоговое число в восьмеричной системе готово.
Пример:
Хотим преобразовать число 1101011010 в восьмеричную систему.
Решение:
- Делим на триады: 011 010 110 10
- Заменяем триады: 3 2 6 2
- Соединяем цифры: 3262
Ответ: 3262 восьмеричное = 1101011010 двоичное.
Перевод в шестнадцатеричную систему счисления. Начиная с правого конца, делим число на тетрады: группы по 4 цифры. Добавляем слева недостающие нули, чтобы все группы были четырехзначными.
Заменяем каждую тетраду на соответствующую шестнадцатеричную цифру: в этом поможет таблица соответствия между тетрадами и шестнадцатеричными цифрами.
Соединяем шестнадцатеричные цифры слева направо,— итоговое число в шестнадцатеричной системе готово.
Пример:
Хотим преобразовать число 101011101010111101010101111110111010101110111010101011101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010
Решение:
- Делим число на тетрады
- Заменяем тетрады: A 5 B A 5 F E B C E A 5 6 7 4 2 E A 5 6 7 4 2 E A 5 6 7 4 2 E A 5 6 …
- Соединяем цифры: A5B5F7EBCE56742EA56742EA56742EA56742E
Как изучить системы счисления
Часто системы счисления проходят в школе на уроках информатики или математики. Но не всегда эту тему включают в программу. Тем не менее это одно из базовых понятий компьютерных наук — для успешной карьеры в IT лучше понимать, что такое системы счисления и как они работают. Вы можете воспользоваться онлайн-учебниками, статьями и туториалами или бесплатными курсами по основам информатики. Так как тема считается базовой, информации по ней много, в том числе ориентированной на новичков.
0 комментариев