Открыть сервисСервис

Восьмеричная система счисления

Восьмеричная система счисления — это позиционная система счисления с целочисленным основанием 8. Для записи чисел в восьмеричной системе используются восемь цифр: 0, 1, 2, 3, 4, 5, 6, 7. Каждый разряд числа в этой системе представляет степень числа 8. Восьмеричная система широко применялась в вычислительной технике в середине XX века как компактная форма представления двоичных чисел, однако в настоящее время в значительной степени вытеснена шестнадцатеричной системой.

История

Восьмеричная система счисления имеет древние корни. Некоторые народы, например индейцы Юкатана (майя) и отдельные племена Северной Америки, использовали счёт, основанный на числе 8, что связывают со счётом по промежуткам между пальцами рук (без учёта больших пальцев). В Европе в XVI—XVII веках математики, такие как Томас Хэрриот, экспериментировали с различными основаниями систем счисления, включая 8, но широкого практического применения это не получило.

Активное внедрение восьмеричной системы началось в середине XX века с развитием электронных вычислительных машин (ЭВМ). В ранних компьютерах, таких как IBM 704 и UNIVAC, машинное слово часто было кратно 3 битам (например, 12, 24, 36 бит). Поскольку три двоичных разряда (бита) образуют ровно одну восьмеричную цифру (2³ = 8), восьмеричная запись позволяла очень компактно и наглядно представлять содержимое памяти и машинные коды. В 1950—1960-х годах восьмеричная система стала стандартом де-факто для программирования на ассемблере и ввода данных на многих машинах, включая PDP-8, PDP-11, а также советские ЭВМ серий «Урал», «Минск», БЭСМ и «Эльбрус».

С распространением 8-битных микропроцессоров (Intel 8080, Z80, MOS Technology 6502) в 1970-х годах восьмеричная система сохраняла популярность, так как 8-битный байт удобно делился на две восьмеричные цифры (старшую и младшую). Однако с переходом к 16-битной и 32-битной архитектуре, где машинное слово стало кратным 4 битам, на смену восьмеричной пришла шестнадцатеричная система (основание 16), которая обеспечивает ещё более компактную запись (одна цифра на 4 бита). Тем не менее, восьмеричная система до сих пор используется в некоторых областях, например, для задания прав доступа в файловых системах Unix-подобных операционных систем.

Представление чисел

Запись и обозначение

В математике восьмеричное число обычно записывается с помощью цифр 0–7. Чтобы отличить его от десятичного, часто используют нижний индекс: 237₈, 777₈. В программировании для обозначения восьмеричных чисел применяются различные префиксы или суффиксы:

  • В языках C, C++, Java, JavaScript, Python (версии 2.x и 3.x) восьмеричное число записывается с ведущим нулём: 0377, 0777. В Python 3.x также поддерживается префикс 0o (например, 0o377).
  • В ассемблере и некоторых системах (например, PDP-11) используется суффикс O или Q: 377O, 777Q.
  • В Unix-подобных системах права доступа к файлам задаются в восьмеричном виде (например, chmod 755).

Перевод из восьмеричной системы в десятичную

Для перевода числа из восьмеричной системы в десятичную необходимо представить его в виде суммы произведений цифр на соответствующие степени числа 8. Например, число 237₈ переводится так:

237₈ = 2 × 8² + 3 × 8¹ + 7 × 8⁰ = 2 × 64 + 3 × 8 + 7 × 1 = 128 + 24 + 7 = 159₁₀.

Перевод из десятичной системы в восьмеричную

Перевод целого числа из десятичной системы в восьмеричную выполняется последовательным делением на 8 с записью остатков. Остатки, записанные в обратном порядке, образуют восьмеричное число. Например, для числа 159₁₀:

  • 159 ÷ 8 = 19 (остаток 7)
  • 19 ÷ 8 = 2 (остаток 3)
  • 2 ÷ 8 = 0 (остаток 2)

Остатки в обратном порядке: 2, 3, 7 → 237₈.

Перевод между восьмеричной и двоичной системами

Поскольку 8 = 2³, перевод между восьмеричной и двоичной системами чрезвычайно прост: каждая восьмеричная цифра заменяется трёхбитовой двоичной группой (триадой). Таблица соответствия:

Восьмеричная цифраДвоичная триада
0000
1001
2010
3011
4100
5101
6110
7111

Для перевода восьмеричного числа в двоичное достаточно заменить каждую цифру соответствующей триадой. Например, 237₈ → 010 011 111₂ → 10011111₂ (ведущий ноль отбрасывается). Для обратного перевода двоичное число разбивается на группы по три бита справа налево, и каждая группа заменяется восьмеричной цифрой. При необходимости слева дописываются незначащие нули.

Арифметические операции

Арифметические действия в восьмеричной системе (сложение, вычитание, умножение, деление) выполняются по тем же правилам, что и в десятичной, но с основанием 8. Перенос в следующий разряд происходит при достижении значения 8. Например, сложение 7₈ + 1₈ = 10₈ (перенос единицы в следующий разряд, в текущем — 0). Умножение: 7₈ × 7₈ = 61₈ (7×7=49₁₀; 49 ÷ 8 = 6, остаток 1).

Применение

Права доступа в Unix-подобных системах

Наиболее известное современное применение восьмеричной системы — задание прав доступа к файлам и каталогам в операционных системах семейства Unix (Linux, macOS, BSD). Права задаются трёхзначным восьмеричным числом, где каждая цифра представляет собой комбинацию прав для владельца, группы и остальных пользователей. Каждая цифра получается суммированием значений: 4 — чтение, 2 — запись, 1 — выполнение. Например, 755 означает: владелец — чтение, запись, выполнение (4+2+1=7); группа — чтение, выполнение (4+1=5); остальные — чтение, выполнение (4+1=5).

Программирование и отладка

В некоторых языках программирования (C, C++, Perl, Python) восьмеричные литералы используются для задания целочисленных констант, особенно при работе с битовыми масками, флагами и системными вызовами. В ассемблере и при отладке низкоуровневого кода восьмеричная запись может быть удобна для анализа содержимого памяти, если архитектура процессора ориентирована на 3-битные группы.

Историческое применение

В ранних ЭВМ (PDP-8, PDP-11, IBM 704, советские «Минск», «Урал», БЭСМ) восьмеричная система была основным способом ввода и вывода данных, а также записи машинных команд. Программисты того времени мыслили восьмеричными числами, и многие справочники по машинным кодам были составлены именно в восьмеричной системе. С переходом на 16-битные и 32-битные архитектуры восьмеричная система утратила доминирующее положение, уступив шестнадцатеричной.

Связь с другими системами счисления

Восьмеричная система является промежуточным звеном между двоичной и десятичной системами. Она компактнее двоичной (одна цифра заменяет три бита) и проще для перевода в двоичную, чем десятичная. Однако по сравнению с шестнадцатеричной системой (основание 16, одна цифра на 4 бита) восьмеричная менее компактна для современных 8-битных байтов и 16-битных слов. Тем не менее, в некоторых контекстах (например, при работе с 12-битными или 36-битными архитектурами) восьмеричная система остаётся более естественной.

Интересные факты

  • Восьмеричная система иногда называется «октальной» (от лат. octo — восемь).
  • В языке программирования Python восьмеричные числа с префиксом 0o были введены в версии 3.0 (2008 год) для устранения неоднозначности, связанной с ведущим нулём.
  • В некоторых калькуляторах и системах счисления восьмеричная система используется для обучения основам позиционных систем, так как она проще шестнадцатеричной (не требует буквенных цифр).
  • В СССР в 1960–1970-х годах восьмеричная система преподавалась в техникумах и вузах как основная система для программирования на ЭВМ «Минск-22» и «Урал-14».

Источники

  • Кнут Д. Э. Искусство программирования. Том 2. Получисленные алгоритмы. — 3-е изд. — М.: Вильямс, 2007. — 832 с. — ISBN 978-5-8459-1131-5.
  • Таненбаум Э. Архитектура компьютера. — 6-е изд. — СПб.: Питер, 2013. — 816 с. — ISBN 978-5-496-00373-3.
  • Брайант Р., О’Халларон Д. Компьютерные системы: архитектура и программирование. — СПб.: БХВ-Петербург, 2005. — 1120 с. — ISBN 5-94157-759-1.
  • Орлов С. А., Цимбалюк Б. Я. Вычислительные машины и системы. — М.: Высшая школа, 2005. — 448 с. — ISBN 5-06-004526-8.
  • ГОСТ 34.003-90. Информационная технология. Комплекс стандартов на автоматизированные системы. Автоматизированные системы. Термины и определения.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru