Литералы восьмеричных чисел:Когда?Почему?Когда-нибудь?[закрыто]

StackOverflow https://stackoverflow.com/questions/44569

  •  09-06-2019
  •  | 
  •  

Вопрос

Я никогда не использовал восьмеричные числа в своем коде и не сталкивался с каким-либо кодом, который их использовал (несмотря на шестнадцатеричное и битовое искажение).

Я начал программировать на C / C ++ около 1994 года, так что, может быть, я слишком молод для этого?Использует ли старый код восьмеричную цифру?C включает поддержку для них, добавляя 0, но где код, который использует эти литералы с базовыми 8 числами?

Это было полезно?

Решение

Недавно мне пришлось написать код сетевого протокола, который обращается к 3-разрядным полям.Восьмеричный формат пригодится, когда вы захотите это отладить.

Просто для эффекта, не могли бы вы сказать мне, что это за 3-битные поля?

0x492492

С другой стороны, это же число в восьмеричном:

022222222

Теперь, наконец, в двоичном формате (в группах по 3):

010 010 010 010 010 010 010 010

Другие советы

Единственное место, где я сталкиваюсь с восьмеричными литералами в наши дни, - это когда имею дело с битами разрешений для файлов в Linux, которые обычно представлены в виде 3 восьмеричных цифр, где каждая цифра представляет разрешения для владельца файла, группы и других пользователей соответственно.

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

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

От Википедия

В то время, когда восьмеричный язык впервые стал широко использоваться в вычислительной технике, такие системы, как мэйнфреймы IBM использовали 24-битные (или 36-битные) слова.Восьмеричное число было идеальной аббревиатурой двоичного числа для этих машин, потому что восемь (или двенадцать) цифр могут кратко отображать всю машину слово (каждая восьмеричная цифра покрывает три двоичных разряда).Это также позволило сократить расходы за счет возможности использования трубок Nixie, семисегментных дисплеев и калькуляторов для пультов оператора;там, где двоичные отображения были слишком сложными для использования, десятичные отображения требовали сложного аппаратное обеспечение для преобразования радиусов и шестнадцатеричные дисплеи, необходимые для отображения письма.

Однако все современные вычислительные платформы используют 16-, 32- или 64-разрядные слова, причем восемь бит составляют байт.В таких системах потребовались бы три восьмеричные цифры, причем самая значащая восьмеричная цифра неэлегантно представляющий только две двоичные цифры (а в серии одна и та же восьмеричная цифра будет представлять одну двоичную цифру из следующего байта).Следовательно, шестнадцатеричный код более распространен сегодня он используется в языках программирования, поскольку шестнадцатеричная цифра охватывает четыре двоичные цифры и все современные вычислительные платформы имеют машинные слова, которые равномерно делятся на четыре.Некоторые платформы с размером слова в степени двойки по-прежнему содержат подслова инструкций которые легче понять, если они отображаются восьмеричными;это включает в себя PDP-11.Современная вездесущая архитектура x86 также относится к этой категории но octal почти никогда не используется на этой платформе.

-Адам

Я никогда не использовал восьмеричные числа в своем коде и не сталкивался ни с каким кодом, который их использовал.

Держу пари, что так оно и было.Согласно стандарту, числовые литералы, начинающиеся с нуля, являются восьмеричными.Это включает в себя, тривиально, 0.Каждый раз, когда вы использовали или видели буквенный ноль, это была восьмеричная цифра.Странно, но это правда.:-)

Коммерческая авиация использует восьмеричные "метки" (в основном идентификаторы типов сообщений) в почтенном стандарте шины Arinc 429.Таким образом, возможность указывать значения меток в восьмеричном формате при написании кода для приложений авионики очень приятна...

Я также видел восьмеричную цифру, используемую в авиационных транспондерах.Код транспондера mode-3a - это 12-битное число, с которым все имеют дело как с 4 восьмеричными числами.Есть немного больше информации о Википедия.Я знаю, что обычно это не связано с компьютерами, но FAA тоже использует компьютеры :).

Это полезно для chmod и mkdir функции в Unix существуют, но помимо этого я не могу придумать никаких других распространенных применений.

Я вступил в контакт с Octal через PDP-11, и так же, по-видимому, поступил язык Си :)

файлы tar хранят информацию в виде строки с восьмеричным целочисленным значением

Нет никакой земной причины изменять стандарт, который восходит к рождению языка и который существует в неисчислимом количестве программ.Я все еще помню символы ASCII по их восьмеричным значениям, пришлось бы подумать, чтобы придумать шестнадцатеричное значение A, но оно равно 101 в восьмеричном;число 0 равно 060...^C равно 003...

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

Теперь, если вы действительно хотите изменить свою точку зрения, взгляните на формат word для PDP-10...

До сих пор существует множество старых систем управления технологическими процессами (Honeywell H4400, H45000 и т.д.) конца 60-х и 70-х годов, которые настроены на использование 24-битных слов с восьмеричной адресацией.Подумайте о том, когда в Соединенных Штатах были построены последние атомные электростанции, в качестве одного из примеров.

Замена этих промышленных систем - довольно серьезное мероприятие, так что, возможно, вам просто повезет встретить одну из них в дикой природе до того, как они исчезнут, и вы будете в восторге от их великолепных пользовательских форматов с плавающей запятой!

Любой, кто учился программировать на PDP-8, питает теплые чувства к восьмеричным числам.Размер слова составлял 12 бит, разделенных на 4 группы по 3 бита в каждой, так что -1 равнялось 7777 восьмеричным числам.Эта схема была увековечена в PDP-11, который содержал 16-битные слова, но все еще использовал восьмеричное представление для различных вещей, отсюда и схема разрешения файлов * NIX, которая живет по сей день.

Octal является и был наиболее полезен с первыми доступными аппаратными средствами отображения (7-сегментные дисплеи).Эти оригинальные дисплеи не имели декодеров, доступных позже.

Таким образом, выходы цифрового регистра были сгруппированы в соответствии с доступным дисплеем, который был способен отображать только восемь (8) символов:0,1,2 3,4,5,6,7 .

Кроме того, первые электронно-лучевые дисплеи были растровыми дисплеями сканирования, а простейшие генераторы символов были эквивалентны 7-сегментным дисплеям.

Мотивирующим фактором, как всегда, был самый дешевый дисплей из возможных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top