Для чего используются восьмеричные числа (база 8)?

11

Java предоставляет способы написания числовых литералов в базах 2, 8, 10 и 16.

Мне интересно, почему база 8 включена, например int x = 0123;?

Я думаю, что может быть что-то похожее на тот факт, что в шестнадцатеричном формате емкость одного байта равна FF + 1 и так далее.

jokinjo
источник
7
Я считаю, что ваш вопрос "Для чего используются восьмеричные числа?"
GetMeARemoteJob
Да, именно так я и должен был сформулировать вопрос. Спасибо за все интересные ответы. Я думал, что это может иметь историческую основу, но у меня не было опыта, необходимого для того, чтобы это понять.
Джокинджо

Ответы:

16

Этот ответ был написан для исходного вопроса: «Почему полезно писать число в базе 8?»

Это должно было сделать язык знакомым для тех, кто знал C и т. Д. Тогда вопрос в том, зачем поддерживать его в тех!

Существовали архитектуры (различные PDP), которые использовали слова шириной 18 бит (а другие использовали 36-битные слова), поэтому литералы, где цифра имеет ширину 3 бита, были бы полезны.

Практически, единственное место, где я видел его в Java-коде, - это определение разрешений в стиле Unix, например 0777, 0644и т. Д.

(Непростой ответ на вопрос, почему он поддерживается, - «получить отклик на этот вопрос »).

Энди Тернер
источник
О, хорошо, я забыл о правах доступа к файлам в Linux! Минимальное использование доступных битов ... восьмеричное соответствует требованиям.
Сарлация
1
@sarlacii «минимальное использование» не имеет к этому никакого отношения, «восьмеричная» -теральность литерала int существует только в исходном коде. Просто проще получить разрешения, обозначенные восьмеричным литералом, потому что цифры непосредственно соответствуют пользователю, группе и другим.
Энди Тернер
Я сделал свое первое программирование на мэйнфреймовом компьютере, который имел 60-битные слова и 6-битный набор символов. Адреса были 18 бит. Конечно, мы использовали восьмеричное. Когда я впервые встретил шестнадцатеричное, было довольно странно видеть буквы в числе.
Оле В.В.
@ Энди, я до сих пор считаю это минимальным использованием ... выбор длины в битах связан не только с кодом. Это также ограничено ресурсом. например. Я мог бы выбрать использовать 8 бит для кодирования каждого разрешения, маскируя неиспользуемые биты, требуя 3 байта, или, вернее, использовать минимум 3 бита, а затем кодировать восьмеричные числа, чтобы использовать только полтора с половиной байта (используя 4-й немного как липкий). Но да, это произвольно, когда вы переходите на битовый уровень ... так как в любом случае вы можете прочитать комбинированное восьмеричное значение как шестнадцатеричное.
сарлация
7

«Восьмеричные числа не так часто встречаются, как раньше. Однако Октал используется, когда число бит в одном слове кратно 3. Он также используется в качестве сокращения для представления прав доступа к файлам в системах UNIX и представления Номера UTF8 и т. Д.

От: https://www.tutorialspoint.com/octal-number-system

ЮР
источник
3
На самом деле это не «количество бит в слове» - так как оно использовалось на 16-битных миникомпьютерах в виде старшего бита 0/1 и затем 5-значного восьмеричного числа. Лучшее описание может быть таким: Используется, когда размер поля в слове кратен 8 битам. Те же компьютеры имели (часто) 8 регистров - поэтому регистр, указанный в инструкции, будет иметь 3-битное поле для именования регистра, а команда регистр-регистр будет иметь два таких 3-битных поля; те же компьютеры часто имели 3-битный код операции или 3-битный код операции с «escape» (например, 0111) для 6-битного кода операции; и т. д. и т. д.
Давидбак
4

Историческая наука о компьютерах. Для представления группы битов база 10 не подходит, база 8 = 2 3 для 3 битов и база 16 = 2 4 для 4 битов подходят лучше.

Преимущество базы 8 состоит в том, что все цифры действительно являются цифрами: 0-7, тогда как база 16 имеет "цифры" 0-9A-F.

Для 8 битов байта база 16 (шестнадцатеричная) лучше подходит и победила. Для Unix base 8 восьмеричное, часто все еще используется для rwxбитов (чтение, запись, выполнение) для пользователя, группы и других; следовательно восьмеричные числа как 0666 или 0777.

Шестнадцатеричный является вездесущим, не в последнюю очередь из-за размеров слова компьютеров в настоящее время несколько байтов. То, что 8 бит byteстали стандартом, - это еще одна сложная история (2 3 бита и адресация).

Joop Eggen
источник
0

Оригинальный ответ на вопрос «Для чего используются восьмеричные числа (база 8)?»

Обычное использование Octal

  • В качестве сокращения двоичного кода: для вычислительных машин (таких как UNIVAC 1050, PDP-8, ICL 1900 и т. Д.) Octal использовался в качестве сокращения двоичного числа, поскольку их размер слова делится на три (каждая восьмеричная цифра представляет три двоичных числа). цифр). Таким образом, две, четыре, восемь или двенадцать цифр могут кратко отображать все машинное слово. Это также позволило сократить расходы, позволив использовать трубки Nixie, семисегментные дисплеи и калькуляторы для консолей оператора, где двоичные дисплеи были слишком сложны для использования, десятичные дисплеи требовали сложного оборудования для преобразования радиусов, а шестнадцатеричные дисплеи требовались для отображения большего числа цифр. ,

  • 16-, 32- или 62-битное представление слов:Все современные вычислительные платформы используют 16-, 32- или 64-битные слова, дополнительно разделенные на восьмибитные байты. В таких системах потребуются три восьмеричные цифры на байт, причем наиболее значимая восьмеричная цифра представляет две двоичные цифры (плюс один бит следующего значащего байта, если таковой имеется). Восьмеричное представление 16-битного слова требует 6 цифр, но наиболее значимая восьмеричная цифра представляет (весьма нечетко) только один бит (0 или 1). Это представление не дает возможности легко прочитать самый значимый байт, поскольку он размазан по четырем восьмеричным разрядам. Следовательно, шестнадцатеричное число чаще используется в языках программирования сегодня, так как две шестнадцатеричные цифры точно определяют один байт. У некоторых платформ с размером слова степени два все еще есть подслуги инструкций, которые легче понять, если они отображаются в восьмеричном виде; это включает семейство PDP-11 и Motorola 68000. Современная вездесущая архитектура x86 также относится к этой категории, но восьмеричная редко используется на этой платформе.

  • Описания кодирования: некоторые свойства двоичного кодирования кодов операций в современной архитектуре x86 становятся более очевидными при отображении в восьмеричном виде, например, байт ModRM, который разделен на поля по 2, 3 и 3 бита, поэтому восьмеричное может быть полезно при описании эти кодировки.

  • Разрешения на вычисления и доступ к файлам: Octal иногда используется в вычислениях вместо шестнадцатеричных, возможно, чаще всего в наше время в сочетании с разрешениями для файлов в системах Unix (в доступе к chmod). Его преимущество заключается в том, что не требуется никаких дополнительных символов в виде цифр (шестнадцатеричная система - это base-16, и поэтому для нее требуется шесть дополнительных символов, кроме 0–9).

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

  • Графическое представление байтовых строк: некоторые языки программирования (C, Perl, Postscript и т. Д.) Имеют представление текстов / графики в Octal с экранированием как \ nnn. Восьмеричное представление особенно удобно с байтами не ASCII UTF-8, который кодирует группы из 6 битов, и где любой начальный байт имеет восьмеричное значение \ 3nn, а любой байт продолжения имеет восьмеричное значение \ 2nn.

  • Ранняя арифметика с плавающей запятой: Octal также использовался для вычислений с плавающей запятой в компьютерах Ferranti Atlas (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) и Burroughs B7700 (1972).

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

Дальнейшие чтения: https://en.wikipedia.org/wiki/Octal

Джишан Шейх
источник
1
Мне нравилось читать статью в Википедии, особенно об использовании пробелов между пальцами для подсчета. Тем не менее, по большей части, статья может быть стимулом для моего вопроса. Как я и подозревал, неделимость размеров слов, используемых в современной компьютерной архитектуре, делает восьмеричное представление бесполезным, и один из абзацев, которые вы цитируете как «16-, 32-, 64-битные слова…», совершенно неясен. Не могли бы вы объяснить, как «старший значащий байт смазывается четырьмя восьмеричными цифрами» и «У некоторых платформ с размером слова степени два по-прежнему есть
подслова