Конвертер десятичных чисел в восьмеричные

→
Восьмеричное = последовательное деление на 8 с записью остатков как цифр 0-7

Из десятичной в восьмеричную: система, спрятанная за правами доступа

Что делает эта конвертация

Инструмент записывает число из основания 10 в основании 8, используя цифры от 0 до 7. Восьмеричная давно ушла в немногие ниши, но одна из этих ниш очень оживлённая: права доступа в Unix, где маска вроде 755 или 644 записана в восьмеричной и читается как три независимые цифры, а не как одно число.

Три бита на цифру — в этом весь смысл

Одна восьмеричная цифра покрывает ровно три двоичных разряда, поэтому девятибитное поле прав аккуратно делится на три группы: владелец, группа и остальные. Отсюда и живучесть нотации для прав, хотя для арифметики её перестали применять очень давно. Каждая группа складывается из 4 за чтение, 2 за запись и 1 за выполнение, так что 7 означает все три права, а 5 — чтение и выполнение.

Таблица перевода из десятичной системы в восьмеричную

Десятичные значения, стоящие за режимами файлов и небольшими масками, которые встречаются чаще всего. Строки с правами стоит выучить наизусть: chmod принимает восьмеричную форму, а отчёты показывают десятичную.

ДесятичнаяВосьмеричная
00
11
77
810
1012
1517
1620
3137
64100
100144
127177
200310
255377
10001750

Откуда взялась восьмеричная и где она уцелела

Восьмеричная хорошо ложилась на машины с разрядностью, кратной трём битам, и ранние мини-компьютеры вроде PDP-8 были устроены именно так. Когда стандартом стали восьмибитные байты и шестнадцатибитные слова, её место заняла шестнадцатеричная: четыре делит восемь, а три — нет. Главными выжившими оказались права на файлы, сохранённые десятилетиями привычки и тем, что три бита прав идеально делятся на три.

Как читать цифру прав

Воспринимайте каждую восьмеричную цифру режима как небольшую сумму: 4 — чтение, 2 — запись, 1 — выполнение, сложенные вместе. Тогда 755 — это чтение, запись и выполнение для владельца, а затем чтение с выполнением для группы и остальных, а 644 — чтение и запись для владельца и только чтение для всех прочих.

Частые вопросы

Как перевести десятичное число в восьмеричное вручную?

Делите на 8 и записывайте остаток, затем повторяйте с частным, пока оно не станет нулём, и читайте остатки от последнего к первому. Для 493: 493 ÷ 8 — это 61 и остаток 5, 61 ÷ 8 — это 7 и остаток 5, 7 ÷ 8 — это 0 и остаток 7, получается 755.

Почему права на файлы записывают в восьмеричной?

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

Что на самом деле даёт chmod 755?

Владелец может читать, писать и выполнять файл; участники группы и все остальные могут читать и выполнять, но не изменять. В десятичном виде это 493. Для каталогов те же три бита означают другое: выполнение там нужно, чтобы вообще можно было войти в каталог.

Восьмеричная ещё где-нибудь используется?

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

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

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

Скопируйте приведённый ниже код и вставьте его на свой сайт, чтобы добавить этот конвертер.

<!-- Десятичная в восьмеричную -->
<iframe src="https://unitflow.net/ru/embed/decimal-to-octal" title="Десятичная в восьмеричную" width="100%" height="420" loading="lazy" style="border:0;max-width:100%;display:block"></iframe>
<p><a href="https://unitflow.net/ru/decimal-to-octal" target="_blank" rel="noopener">Работает на UnitFlow</a></p>