Найти в Дзене

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

Оглавление

Сегодня мы с вами считаем не задумываясь и используем счет в любой сфере деятельности. Но когда-то это не было само собой разумеющимся. А как-то передать информацию о количестве чего-либо надо было. Давайте сегодня обсудим счет и системы счисления!

Введение. Основные понятия

Итак, счет появился тогда, когда человеку потребовалось информировать своих соплеменников о количестве обнаруженных им предметов. В разных местах придумывались разные способы передачи численной информации: от зарубок по числу предметов до хитроумных знаков - цифр.

Прежде чем погрузиться в историю, проведём важную границу между двумя понятиями:

Число — это абстрактная величина, количественная мера. Например, «пять» — это число.
Цифра — это всего лишь символ, знак для записи числа. Одно и то же число можно выразить разными цифрами. Например, число «пять» можно записать как:
5 — в привычной нам арабской десятичной системе.
V — в римской нумерации.
101 — в двоичном коде, понятном компьютеру.
При этом комбинация 10 означает «десять» для большинства людей, но всего лишь «два» — для программистов и компьютеров.

Таким образом, значение символа зависит от системы нумерации и его положения в записи, тогда как с числом всегда связана определенная количественная характеристика.

Совокупность правил записи чисел (способ соединения цифр для обозначения числа) называется системой счисления.

Как возникли системы счисления и как люди считали в древности?

Первые «вычислительные системы» были буквально под рукой у древних людей — они использовали пальцы:

  • Двенадцатеричный счёт использовали тибетские и нигерийские племена, пересчитывая фаланги пальцев (исключая большой).
  • Восьмеричная система была распространена у сибирских звероловов, которые вели подсчёт по суставам пальцев. Когда на одной руке набиралось 8, они загибали один палец на другой руке. Таким образом рука в кулаке обозначала 40 – «счет сороками».
  • Двадцатеричная система до сих пор сохранилась у некоторых народов Полинезии — в ход шли не только пальцы рук, но и ног, ведь они ходили босиком.
  • Пятеричная система была популярна у многих африканских народов, которые ориентировались на пять пальцев одной руки.
  • В Китае разработали уникальную методику, позволяющую с помощью сложных комбинаций пальцев одной руки изобразить любое число до 9999. Каждый палец отвечал за единицы, десятки, сотни и тысячи, каждая сторона фаланги отвечала за конкретное число от 1 до 10. Показывая последовательность фаланг пальцем другой руки, можно было показать число.

Несмотря на всё это разнообразие, именно десятичная система стала мировой. Вероятно, причина в её наглядности и универсальности: десять пальцев на двух руках — всегда доступный и понятный «калькулятор». Ноги, часто скрытые обувью, были менее удобны для постоянного визуального контроля, что и закрепило «власть» числа 10, которое прошло через тысячелетия и легло в основу современной математики и цифровых технологий.

Способы записи чисел

С появлением письменности и развитием цивилизаций возникла необходимость записывать очень большие числа. И рисовать 10000 палочек было уже непростым занятием.
Но все же исторически первой и наиболее интуитивно понятной моделью стала
непозиционная система счисления. Её фундаментальный принцип заключается в том, что количественное значение любого символа неизменно и не зависит от его положения в числе. То есть, если у вас 5 черточек — то число тоже равно 5, поскольку каждой черточке, независимо от её места в строке, соответствует всего 1 один предмет.

Ярчайшим примером, дожившим до наших дней, является римская нумерация. В её основе лежат латинские буквы с фиксированным значением:
I (1), V (5), X (10), L (50), C (100), D (500), M (1000).

-3

Для перевода римского числа в привычный нам формат используется правило сложения: значения всех символов суммируются. Однако из этого правила есть ключевое исключение: если меньший символ стоит перед большим, его значение не прибавляется, а вычитается. Именно этот принцип позволяет компактно записывать числа вроде IV (4), IX (9) или XC (90).
Непозиционный подход был характерен для многих великих цивилизаций.

Древний Египет использовал десятичную систему счисления и иероглифы-степени десятки.

-4

Для записи числа, например, 345, египтяне просто комбинировали необходимое количество символов для 100, 10 и 1:

-5

При записи числа каждый символ мог повторяться не более девяти раз. Итог получался простым суммированием. Стоит отметить, что такой способ получения значения свойственен практически любой непозиционной системе счисления.

Древняя Греция (ионийская система) пошла по пути алфавитного кодирования. Они использовали 27 букв своего алфавита так:
первые 9 обозначали единицы (1-9),
следующие — десятки (10-90),
последние — сотни (100-900).
Так, запись ρμα расшифровывалась как ρ(100) + μ(40) + α(1) = 141.

-6

У славянских народов числовые значения букв также установились в порядке славянского алфавита, который использовал сначала глаголицу, а затем кириллицу.

-7

В России славянская нумерация сохранялась до конца ХVII века. При Петре I возобладала так называемая арабская нумерация, которой мы пользуемся и сейчас. Славянская нумерация сохранялась только в богослужебных книгах.

В отличии от всех этих систем счисления, в вавилонской системе использовалось всего 2 символа:
“прямой” клин — для обозначения единиц,
“лежачий” — для десятков.
Таким образом 32 записывалось как:

-8

Число 60 снова обозначалось тем же прямым клином, что и 1. Этим же знаком обозначались числа 3600 = 60², 216000 = 60³ и все другие степени 60. Поэтому вавилонская система счисления получила название шестидесятеричной.

Для определения значения числа нужно было изображение числа разбить на разряды справа налево. Чередование групп одинаковых знаков ("цифр") соответствовало чередованию разрядов:

-9

Значение числа определяли по значениям составляющих его "цифр", но с учетом того, что "цифры" в каждом последующем разряде значили в 60 раз больше тех же "цифр" в предыдущем разряде

Все числа от 1 до 59 вавилоняне записывали в десятичной непозиционной системе, а число в целом - в позиционной системе с основанием 60.

Но такая запись числа была неоднозначной, так как не существовало "цифры" для обозначения нуля. Запись числа 92, могла обозначать не только 92 = 60 + 32, но и 3632 = 3600 + 32 = 60² + 32 и т.д.

-10

Со временем вавилоняне ввели специальный символ для обозначения, пропущенного шестидесятеричного разряда, что соответствует в привычной нам десятичной системе появлению цифры 0 в записи числа. Но в конце числа этот символ обычно не ставился, то есть этот символ не был нулем в нашем понимании. Таким образом, число 3632 теперь нужно было записывать так:

-11

Шестидесятеричная вавилонская система — первая система счисления, частично основанная на позиционном принципе. Наследие ее до сих пор живет в нашем измерении времени: в 60 минутах часа и 60 секундах минуты.

Анализируя исторические примеры, можно четко выделить фундаментальные недостатки непозиционных систем счисления, которые ограничивали их практическое применение:

  1. Проблема масштабирования: каждое новое большое число требовало введения уникального символа, что делало систему громоздкой для работы с большими величинами.
  2. Ограниченный математический аппарат: такие системы были практически непригодны для компактной записи дробных или отрицательных чисел.
  3. Сложность вычислений: арифметические действия превращались в сложную процедуру, не поддававшуюся алгоритмизации и требовавшую громоздких таблиц или счетных инструментов.

Революция в системах счисления

Да, первые шаги к решению этих проблем были сделаны в Древнем Вавилоне, где зародилась идея зависимости значения символа от его позиции. Однако настоящую революцию совершили индийские математики, которые разработали законченную модель позиционной десятичной системы, дополнив ее гениальным изобретением — нулем.
Эта концепция была заимствована арабскими учеными, а через их труды попала в Европу, где и закрепилась под исторически сложившимся, хотя и не совсем точным, названием
«арабская система счисления». Она была уже позиционной.

Позиционная система — это система записи чисел, в которой значение каждой цифры определяется не только её значением, но и позицией (местом) в записи числа.

Рассмотрим число 453 в десятичной системе:
- цифра 4 находится в разряде сотен и означает 400 (4 × 10²)
- цифра 5 занимает разряд десятков и означает 50 (5 × 10¹)
- цифра 3 стоит в разряде единиц и означает 3 (3 × 10⁰)
Таким образом, общее значение вычисляется как сумма: 400 + 50 + 3 = 453.

Любая позиционная система счисления характеризуется своим основанием.
Основание позиционной системы счисления — это количество различных знаков или символов, используемых для изображения цифр в данной системе.

В позиционной системе счисления с основанием q(q-ичная система счисления) единицами разрядов служат последовательные степени числа q, иначе говоря, q единиц какого-либо разряда образуют единицу следующего разряда.
-12

Таким образом, теоретически основанием может служить любое натуральное число, что порождает множество систем: двоичную, троичную, восьмеричную и т.д.

Обычно основание одно для всех разрядов, но бывают исключения. Поэтому позиционные системы счисления делятся на однородные и смешанные.

Однородная система — для всех разрядов (позиций) числа набор допустимых символов (цифр) одинаков. В качестве примера возьмем упоминавшуюся ранее 10-ю систему. При записи числа в однородной 10-й системе вы можете использовать в каждом разряде исключительно одну цифру от 0 до 9, таким образом, допускается число 450 (1-й разряд — 0, 2-й — 5, 3-й — 4), а 4F5 — нет, поскольку символ F не входит в набор цифр от 0 до 9.

Смешанная система — в каждом разряде (позиции) числа набор допустимых символов (цифр) может отличаться от наборов других разрядов. Яркий пример — система измерения времени. В разряде секунд и минут возможно 60 различных символов (от «00» до «59»), в разряде часов – 24 разных символа (от «00» до «23»), в разряде суток – 365 и т. д.

Кроме десятичной в современном мире широко используются системы с основанием, являющимся целой степенью числа 2, а именно:

  • двоичная (используются цифры 0, 1);
  • восьмеричная (используются цифры 0, 1, ..., 7);
  • шестнадцатеричная (для первых целых чисел от нуля до девяти используются цифры 0, 1,.... 9, а для следующих чисел от десяти до пятнадцати — в качестве цифр используются символы А, В, С, D, Е, F).

Ведущую роль в их возникновении стали разработки в области электронной вычислительной техники.

Какие системы счисления используют специалисты для общения с компьютером?

В стремлении к автоматизации люди стали разрабатывать различные вычислительные машины, сумматоры и калькуляторы.

Изначально изобретатели шли по пути имитации человеческого счета. Яркий пример — механический калькулятор Блеза Паскаля (1642 г.), работавший в привычной десятичной системе.

-13

Однако с приходом эры электроники десятичная система счисления показала свою неэффективность: создание надежного и компактного элемента, способного стабильно находиться в десяти различных состояниях, оказалось чрезвычайно сложной и дорогой задачей.
Гораздо более элегантным решением стала
двоичная система, требующая всего двух состояний: 0 и 1. Такой подход радикально упростил архитектуру: вместо десяти состояний достаточно было реализовать два — есть сигнал (1) или нет сигнала (0), замкнуто или разомкнуто, намагничено или нет.

Переход к двоичной логике стал возможен благодаря трудам нескольких ключевых мыслителей:

Готфрид Лейбниц (XVII век) — в работе «Explication de l’Arithmétique Binaire» не только формализовал двоичную арифметику, но и увидел в ней красоту и универсальность, увязывая с философскими концепциями творения из ничего.

Страница из Explication de l’Arithmétique Binaire
Страница из Explication de l’Arithmétique Binaire

Джордж Буль (1854 год) — разработал булеву алгебру, создав математический аппарат для операций с логическими значениями «истина» и «ложь». Эта абстрактная система ждала своего воплощения в железе.

Клод Шеннон (1937 год) — совершил прорыв, показав в своей диссертации, что булева алгебра и двоичная система идеально подходят для проектирования электронных схем на основе реле и переключателей. Его работа заложила основу всей современной цифровой техники.

Страница из диссертации Шеннона
Страница из диссертации Шеннона

Теоретические открытия быстро нашли воплощение:

«Model K» Джорджа Штибица (1937 год) — это была, по сути, первая в истории электромеханическая схема, способная выполнять двоичное сложение. Примечательно, что она была собрана на его домашней кухне.

-16

Комплексный калькулятор Bell Labs — более развитая машина, разработанная под руководством Штибица, которая уже работала с комплексными числами. Именно на ней 11 сентября 1940 года была проведена первая в мире демонстрация удаленного доступа к компьютеру: Штибиц, находясь в Дартмутском колледже, отправил задание по телефонной линии на вычислитель в Нью-Йорке и получил обратно результат. Это была первая попытка использования удалённой вычислительной машины посредством телефонной линии.

-17

Таким образом вычислительная техника продолжала развиваться в парадигме двоичной системы счисления и сейчас она до сих пор наиболее распространена.

Чтобы не путать, в какой системе счисления записано число, его снабжают указателем справа внизу.
Вот наиболее распространенные обозначения двоичной записи числа (на примере цифры 5):

101
101

0b101
&101

Восьмеричная система была создана для сокращения записи двоичных чисел благодаря более компактной записи. Это было важно на раннем этапе развития компьютерной техники, когда память была ограничена. Существует лёгкий способ перевода восьмеричных чисел в двоичные и обратно, путём замены восьмеричных чисел на триплеты двоичных. Широко использовалась в программировании и компьютерной документации, однако после увеличения необходимых мощностей ЭВМ и изобретения байта она была почти полностью вытеснена шестнадцатеричной системой.

-18

Но в некоторых областях она все еще сохраняется:

  • Восьмеричные числа по-прежнему используются в некоторых языках программирования для задания числовых констант. К таким языкам относятся Си/C++, Ada, Perl, Java и Python (до 3.0). В них есть специальный синтаксис для записи восьмеричных констант с применением ведущего нуля. Например, 0644 — запись литеральной константы с десятичным значением 420₁₀.
  • Восьмеричные числа применяются при настройке прав доступа к файлам и каталогам в Unix-подобных операционных системах, таких как Linux. Каждая восьмеричная цифра задает права доступа для владельца, группы и остальных пользователей соответственно.
  • Восьмеричные числа могут использоваться программистами и системными администраторами при работе с битовыми масками и флагами. Восьмеричное представление битовых комбинаций зачастую более наглядно и удобно для восприятия, чем шестнадцатеричное или десятичное.
  • Восьмеричные числа применяются в некоторых стандартах и протоколах передачи данных. Например, в протоколе передачи файлов FTP используются восьмеричные коды для обозначения различных состояний и режимов работы.
  • В образовательных целях при изучении основ информатики, программирования и вычислительной техники восьмеричные числа также могут фигурировать. Знание различных систем счисления, включая восьмеричную, помогает студентам и учащимся лучше понимать принципы кодирования и обработки данных.

На смену восьмеричной очень быстро пришла шестнадцатеричная система счисления. В качестве цифр этой системы счисления обычно используются цифры от 0 до 9 и латинские буквы от A до F. Буквы A, B, C, D, E, F имеют значения 10₁₀, 11₁₀, 12₁₀, 13₁₀, 14₁₀, 15₁₀ соответственно. Пример шестнадцатеричного числа: 1A45F0D (1A45F0D₁₆ = 27 549 453₁₀).

Эта система счисления получила широкое распространение, так как минимальной адресуемой единицей памяти сейчас является 8-битный байт, и его значение удобно представлять двумя шестнадцатеричными цифрами (каждая кодирует ровно 4 бита — полубайт или ниббл). Этот стандарт был популяризирован с появлением системы IBM/360, в то время как другие платформы (PDP-11, БЭСМ-6) всё ещё использовали восьмеричную запись.

Где мы можем встретиться на практике с шестнадцатеричной системой?

  • Кодирование значения цвета — запись трёх компонентов цвета (R, G и B) в шестнадцатеричном виде. Например, цвет, имеющий шестнадцатеричный номер 00FF00, — ярко-зелёный.
  • В стандарте Юникода. Номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями).
  • Адреса ячеек памяти в устройствах часто записывают в 16-чных значениях.
  • MAC-адреса. Уникальный идентификатор вашего сетевого устройства (Wi-Fi адаптера, Ethernet-карты) записывается как 6 пар HEX-чисел. Например: A4:C3:F0:2B:81:9C.
  • Почти во всех языках программирования в целом для любых задач используется эта система счисления на ряду с двоичной и десятеричной.

В разных языках программирования, средах разработки и документации для записи шестнадцатеричных чисел используют различный синтаксис. Вот примеры, как может выглядеть одно и то же число 5A3₁₆ (1443₁₀):

5A3
5A3
₁₆
16#5A3#
0x5A3
5A3
h
$5A3
X’05A3
# 05A3
&h5A3
5A3
hex

Помимо широко известных систем, существует множество нетрадиционных (система Бергмана, Цекендорфа, факториальная, нега-позиционная, симметричная и др.). Их сфера применения крайне узка — от математических изысканий до специализированных технологий кодирования, и в рамках этого обзора мы их рассматривать не будем.

Наше путешествие от зарубок на дереве до шестнадцатеричных кодов показало, как эволюционировали способы записи чисел. Каждая система — это отражение технологических возможностей и потребностей своей эпохи.
Кажется, что это малоприменимая на практике информация, которую мы проходили в школе и успешно забыли.

Но мы живем в эру современных технологий, где графическим редактором владеет любая девчонка, а программируют даже школьники.
Так или иначе это фундамент, на котором строятся дальнейшие понятия о переменных и их типах, о данных, хранении и передаче информации и т.п.

Поэтому знать базу – важно!