Я просто 20 минут бился головой об стол, глядя на совершенно странную ошибку в PHP, а потом понял, что восьмеричная. <% (* & #> Восьмеричное).
Короче говоря, я добавил несколько литералов с нулями, чтобы код выровнялся, я знаю, большая ошибка. Забыли про восьмерики.
Вопрос в том, использует ли кто-нибудь восьмеричные символы для чего-либо кроме прав доступа к файлам? (Я лично предпочитаю, chmod ugo+rwx
но я понимаю, что если они должны быть сгенерированы программно, полезно использовать восьмеричные числа.) Но полезны ли они в любой другой ситуации?
0o
префикс (что соответствует0x
и ,0b
но , возможно, немного трудно отличить от00
). Начиная с Python 3, дополнительные начальные нули являются синтаксической ошибкой, чтобы предотвратить подобные ошибки.Ответы:
Согласно Википедии , восьмеричные не так распространены, как раньше. Как уже упоминалось, в прошлом системы имели 12/24/36-битное слово, которое легче представить в восьмеричном, чем шестнадцатеричном формате, но в настоящее время архитектуры x86 и i64 используют бит 16/32/64 Слово, которое легче представить в шестнадцатеричном и прямо уродливым в восьмеричном.
Текущее использование, однако, включает:
\3nn
и любой дополнительный байт\2nn
)0
на каком-то языке программирования, который поддерживает восьмеричные числа, как писал этот пользователь .Обратите внимание, что современные языки программирования иногда не поддерживают восьмеричные числа из-за отсутствия сценариев использования и потенциальных ошибок. C # является примером, как Эрик Липперт написал это в третьем и четвертом изданиях TCPL :
Код «Скрытый язык компьютерного оборудования» и просто для справки и любопытства содержит отличное и понятное объяснение восьмеричной и других систем счисления на стр. 55 - 63 .
источник
parseInt(011)==9
Около 50 лет назад Octal широко использовался Digital Equipment Corp. (DEC) и другими компаниями, у которых были компьютеры с 12-разрядным словом (например, PDP-8) или другими, кратными шести, такими как 18 и 36 (например, UNIVAC 1108). ). Я использовал как PDP-8, так и UNIVAC 1108 в аспирантуре. Символы в обеих машинах обычно используют шесть битов, а не 8.
Формат команды PDP-8 - обратите внимание, что биты пронумерованы от 0 до> 11. Бит 0 был MSB (самый старший бит).
Когда DEC выпустила 16-битный PDP-11, они продолжили использовать восьмеричную в своей документации вместо шестнадцатеричной, как это использовали другие производители миникомпьютеров, выпускавшие в то время 16-битные машины. Вероятно, это произошло из-за множества 3-битных полей в форматах команд PDP-11, таких как Register, Mode и Src / Dest, которые можно декодировать как восьмеричные цифры. (Спасибо Джону Строму за указание на это.)
Интересно, что когда Motorola выпустила свой микропроцессор 68000, который находился под сильным влиянием PDP-11 и имел те же 3-битные поля Mode и Register в инструкциях, они решили использовать только шестнадцатеричный код в своей документации.
Поскольку в PDP-11 использовалась восьмеричная нотация, исходные коды разрешений для Unix, впервые появившиеся на PDP-11, также использовали восьмеричные. Это наследие сохраняется в Linux, где команда chmod все еще использует восьмеричное значение для указания каждого из трехбитовых полей 'rwx'.
Еще одна мелочь - CompuServe, который в 1980-х и начале 1990-х годов широко использовался в качестве коммутируемого онлайн-сервиса (до того, как AOL затмевал его), работал на мини-компьютерах DEC, по крайней мере, изначально. Все идентификаторы пользователей были числовыми, и в какой-то момент я заметил, что в них никогда не было 8 или 9, поэтому они были в восьмеричном виде. Мой старый код СНГ был 70205.
источник
Heathkit использовал их для передней панели своего H-8 и для списков языков ассемблера своего программного обеспечения на передней панели (называемого PAM-8). Знакомства я знаю.
В настоящее время восьмеричные очень редки; все, кажется, используют гекс. Но числа по-прежнему выглядят как восьмеричные числа, и вам не нужен дополнительный ряд клавиш для цифр от A до F.
источник
Одна из причин, по которой восьмеричное употребление находит применение, заключается в том, что это самая большая база со степенью 2, для которой вам не нужны никакие специальные символы, то есть все цифры могут быть числовыми. База 16 (следующая по сравнению с базой 8) требует нецифровых цифр (обычно A, B, C, D, E, F).
источник
Я использую восьмеричное каждый день. Каждый раз, когда мне нужно chmod для файла, я использую восьмеричное (я предварительно определяю нотацию u + r ...). Каждый раз, когда я хочу вставить управляющий символ в строку, я использую восьмеричное ... (Да, я мог бы использовать шестнадцатеричное, но я использую восьмеричное).
источник
Любой, кому нужно выразить комбинации битов, сгруппированных в тройки.
Почему кто-то использует гекс?
Вещи с макушки головы, которые выражены в виде восьмеричных чисел:
ncurses
библиотекеисточник
7 * 6
или07 * 06
? Мы используем десятичную для представления чисел, поскольку мы можем лучше всего с ними обращаться и шестнадцатеричные для представления чисел, очень близких к тому, как машина хранит их. И мы делаем это много. Этот сайт полон доказательств этого.Когда я работал над мэйнфреймами CDC (с 60-битным словом, 12-битным словом для PPU), все дампы ядра и тому подобное выполнялись в восьмеричном виде (20 восьмеричных цифр на слово, 4 на слово PPU).
источник
Как и шестнадцатеричное, восьмеричное обозначение иногда используется для указания кодов символов. Это может быть удобно по той же причине, что и шестнадцатеричный код: он более компактен, чем двоичный, но его очень легко перевести в двоичный файл в вашей голове.
источник
Как и шестнадцатеричные, восьмеричные числа легко преобразовать из двоичного кода. Просто сгруппируйте двоичные цифры в группы по три, начиная справа.
источник
Нет. Никогда не использовал их. Даже для настройки прав доступа к файлам, потому что я делаю это так редко, что мне трудно читать.
Так что да, есть очевидное преимущество преобразования из двоичного кода в двоичное.
Однако, как уже указывалось @Mason, шестнадцатеричный код является гораздо более «естественным», потому что 2 шестнадцатеричных цифры составляют один байт. Удобно представлять 24/32-битные цвета RGB / ARGB, IP-адреса, байтовые маски и т. Д. Octal с другой стороны не очень практичен, поскольку у вас редко бывают сценарии, в которых вы работаете с 3-битными группами.
Права доступа к файлам - единственное, о чем я мог думать. И если сейчас нет области применения, я сомневаюсь, что она когда-нибудь будет. С тех пор, как последние 20 лет пространство стало настолько дешевым, стало очень редко собирать информацию так плотно, за счет выравнивания, простоты использования и расширяемости.
источник
Немного в стороне, но публичное использование на лондонском метро. Каждый поезд имеет как физическую идентификацию, так и отдельную идентификацию в расписаниях, которая отображается в процессе эксплуатации - см. Здесь: https://upload.wikimedia.org/wikipedia/commons/4/49/LUL-S-Stock-at. -Watford.jpg (обратите внимание на 402 в верхней части экрана назначения). Хотя электроника для дисплеев основана на стандартном десятичном формате, вы никогда не увидите цифр 8 или 9, поскольку они связаны с устаревшим восьмеричным оборудованием в системе сигнализации.
источник