Восьмеричная система счисления¶
Восьмеричная система счисления — это позиционная система счисления с целочисленным основанием 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³, перевод между восьмеричной и двоичной системами чрезвычайно прост: каждая восьмеричная цифра заменяется трёхбитовой двоичной группой (триадой). Таблица соответствия:
| Восьмеричная цифра | Двоичная триада |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
Для перевода восьмеричного числа в двоичное достаточно заменить каждую цифру соответствующей триадой. Например, 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. Информационная технология. Комплекс стандартов на автоматизированные системы. Автоматизированные системы. Термины и определения.
