Восьмеричная система счисления
Восьмери́чная систе́ма счисле́ния — позиционная целочисленная система счисления с основанием 8. Для представления чисел в ней используются цифры от 0 до 7.
Восьмеричная система чаще всего используется в областях, связанных с цифровыми устройствами. Характеризуется лёгким переводом восьмеричных чисел в двоичные и обратно, путём замены восьмеричных чисел на триплеты двоичных. Широко использовалась в программировании и компьютерной документации, однако позднее была почти полностью вытеснена шестнадцатеричной.
Восьмеричная система применяется при выставлении прав доступа к файлам и прав исполнения для участников в Linux-системах[1][2].
Таблица перевода восьмеричных чисел в двоичные
08 = 0002 18 = 0012 28 = 0102 38 = 0112 48 = 1002 58 = 1012 68 = 1102 78 = 1112
Для перевода восьмеричного числа в двоичное необходимо заменить каждую цифру восьмеричного числа на триплет двоичных цифр. Например: 25418 = [ 28 | 58 | 48 | 18 ] = [ 0102 | 1012 | 1002 | 0012 ] = 0101011000012.
Использование в естественных языках
Языки юки[3] и паме[4] используют восьмеричную систему счисления.
В языках программирования
Ряд языков программирования, в частности, Си/C++, Ada, Perl, Java и Python (до 3.0), имеют специальный синтаксис (аналогичный использованию префикса "0x" для шестнадцатеричных констант) для записи восьмеричных констант с применением ведущего нуля, например, 0644 представляет собой запись литеральной константы с десятичным значением 42010.
По статистике, применение восьмеричных констант в программах на языке Си чрезвычайно низко (около 0,1 % от всех литеральных констант, без учета константы «0», технически также восьмеричной). Определенную популярность такие константы сохраняют в случае описания прав на файлы в Unix/POSIX стиле (0666, 0750), и при отдельных случаях работы с битовыми масками, когда программисту проще представлять битовое представление восьмеричных чисел, а не шестнадцатиричных или, тем более, десятичных[5].
Подобные правила указания системы счисления могут быть неочевидны для программистов и приводят к ошибкам. В некоторых языках существуют рекомендации не использовать такую запись[6], в других языках такая запись восьмеричных констант запрещена (например, в Python с версии 3 используется префикс 0o[7][8]) или не используется (например Rust и D[7]).
Некоторые версии языка Бейсик используют для записи восьмеричных констант префикс &O, например, &O644. Здесь O — это не ноль, а буква латинского алфавита, обозначающая английское слово Octal (восьмеричный).
Источники
- ↑ Права доступа к файлам в ОС GNU/Linux (числовой способ записи) (недоступная ссылка). Дата обращения: 2 января 2015. Архивировано 2 января 2015 года.
- ↑ Права доступа . Дата обращения: 2 января 2015. Архивировано 2 января 2015 года.
- ↑ Marcia Ascher. Ethnomathematics: A Multicultural View of Mathematical Ideas . The College Mathematics Journal. Дата обращения: 13 апреля 2007.
- ↑ Avelino, Heriberto. The typology of Pame number systems and the limits of Mesoamerica as a linguistic area (англ.) // Linguistic Typology : journal. — 2006. — Vol. 10, no. 1. — P. 41—60. — doi:10.1515/LINGTY.2006.002.
- ↑ 829 An octal constant consists of the prefix 0 Архивная копия от 11 июля 2018 на Wayback Machine / «The New C Standard: An Economic and Cultural Commentary» (version 1.2, 2009) (англ.)
- ↑ INT00-PL. Do not prepend leading zeroes to integer literals - SEI CERT Perl Coding Standard - Confluence . Дата обращения: 2 октября 2018. Архивировано 3 октября 2018 года.
- ↑ 7,0 7,1 Florian Weber. Octal Zero considered harmful (англ.) (8 апреля 2018). Дата обращения: 2 октября 2018. Архивировано 16 декабря 2018 года.
- ↑ Numbers — Conservative Python 3 Porting Guide 1.0 documentation . Дата обращения: 2 октября 2018. Архивировано 3 октября 2018 года.
Ссылки
- Octomatics: Статья о преимуществах восьмеричной системы, предложение специальных знаков и др. Архивная копия от 4 марта 2007 на Wayback Machine (англ.)