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

→
Десятичное = сумма восьмеричных цифр, умноженных на 8 в степени их позиции

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

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

Инструмент читает значение в основании 8 и пересказывает его в основании 10. Это направление нужно, когда режим уже записан в восьмеричной — как того ждут chmod и ls, — а число должно попасть в скрипт, поле конфигурации или сравнение, где окружающий код рассчитывает на десятичную.

Каждая позиция — степень восьми

Справа налево веса равны 1, 8, 64, 512 и дальше. Переведите 755 и получите 7 × 64 + 5 × 8 + 5 = 493. Обратите внимание: в десятичном виде цифры уже не три независимых права — упакованная структура, делавшая восьмеричную запись читаемой, при переводе растворяется, и об этом стоит помнить до того, как вы воспользуетесь результатом.

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

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

ВосьмеричнаяДесятичная
00
11
77
108
1715
10064
377255
644420
755493
1000512

Почему восьмеричная сузилась до прав

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

Не считайте права в десятичной

Сложить десятичные 493 и 64, чтобы выдать право на чтение, кажется разумным и таковым не является: 64 — это шестьдесят четыре, и бит, который оно устанавливает в восьмеричном режиме, вовсе не тот бит чтения, который вам нужен. Арифметику прав ведите в восьмеричной, значениями вроде 400 и 40, а переводите только для хранения или показа.

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

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

Умножьте каждую цифру на её вес — 1, 8, 64, 512 и дальше справа налево — и сложите результаты. Для 755 это 7 × 64 + 5 × 8 + 5, то есть 448 + 40 + 5, или 493.

Почему chmod 755 показывается в моём скрипте как 493?

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

Какое самое большое восьмеричное значение здесь принимается?

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

Значим ли ведущий ноль в восьмеричной записи?

Численно нет — 0755 и 755 это одно и то же значение, — но он полезен как пометка «здесь восьмеричная», а некоторые языки без него восьмеричный литерал не примут. Конвертер принимает и ведущий ноль, и префикс 0o, а на выводе не печатает ни того, ни другого.

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

Да, и честно сообщает, когда дробь непредставима. Одни восьмеричные дроби заканчиваются, другие нет — это зависит от того, является ли знаменатель степенью двойки. Когда разложение не заканчивается, результат усекается и явно помечается, а не округляется так, будто ответ точный.

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

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