web-dev-qa-db-fra.com

Où les octales sont-ils utiles?

Je me suis juste cogné la tête contre la table pendant environ 20 minutes en regardant un bug totalement bizarre en PHP, puis j'ai réalisé qu'il y avait octal. L'octal <% (* & #>.

En bref, j'ai rempli certains littéraux de zéros pour que le code soit aligné, je sais, grosse erreur. Oublié les octales.

La question est: quelqu'un utilise-t-il des octales pour autre chose que les autorisations de fichier? (Personnellement, je préfère chmod ugo+rwx mais je comprends que si elles doivent être générées par programmation, il est utile d'utiliser des octales.) Mais sont-elles utiles dans toute autre situation?

36
Petruza

Selon Wikipedia , les octales ne sont plus aussi courantes qu'avant. Comme d'autres l'ont déjà mentionné, dans le passé, les systèmes avaient un mot 12/24/36 bits, qui est plus facilement représenté en octal qu'en hexadécimal, mais actuellement, les architectures x86 et i64 utilisent un bit 16/32/64 Mot, qui est plus facilement représenté en hexadécimal et carrément laid en octal.

Cependant, les utilisations actuelles comprennent:

Notez que les langages de programmation modernes ne prennent parfois plus en charge les octaux en raison du manque de cas d'utilisation et du potentiel de bogues. C # est un exemple, comme Eric Lippert l'a écrit dans TCPL 3e et 4e édition :

C # ne prend pas en charge les littéraux octaux, pour deux raisons. Premièrement, presque personne n'utilise les littéraux octaux de nos jours. Deuxièmement, si C # prend en charge l'octal dans le format standard "le premier zéro signifie octal", ce serait une source potentielle d'erreurs. Considérez ce code:

    FlightNumber = 0541;

Il est clair que cette expression est conçue comme un littéral décimal et non un littéral octal.

Relié, et juste pour référence et curiosité, Code, The Hidden Language of Computer Hardware a une excellente explication facile à suivre sur les systèmes de nombres octaux et autres à la page 55 - 6 =.

42
Abel

Octal était largement utilisé il y a environ 50 ans par Digital Equipment Corp. (DEC) et d'autres sociétés qui possédaient des ordinateurs avec un mot de 12 bits (par exemple le PDP-8) ou d'autres multiples de six, tels que 18 et 36 (par exemple UNIVAC 1108 ). J'ai utilisé à la fois le PDP-8 et l'UNIVAC 1108 à l'université. Dans les deux machines, les caractères utilisaient généralement six bits, et non 8.

PDP-8 instruction format

Format d'instruction PDP-8 - notez que les bits sont numérotés de 0 à> 11. Le bit 0 était le MSB (bit le plus significatif).

Lorsque DEC est sorti avec le PDP-11 16 bits, ils ont continué à utiliser l'octal dans leur documentation au lieu de l'hexadécimal tel qu'utilisé par les autres fabricants de mini-ordinateurs proposant des machines 16 bits à l'époque. C'était probablement à cause des multiples champs de 3 bits dans les formats d'instructions PDP-11 comme Register, Mode et Src/Dest qui se prêtaient à être décodés sous forme de chiffre octal. (Merci à John Strohm de l'avoir signalé.)

Fait intéressant, lorsque Motorola est sorti avec son microprocesseur 68000, qui était fortement influencé par le PDP-11 et avait les mêmes champs Mode et Registre 3 bits dans les instructions, ils ont choisi d'utiliser uniquement l'hexadécimal dans leur documentation.

Étant donné que le PDP-11 utilisait la notation octale, les codes d'autorisation d'origine pour Unix, apparus pour la première fois sur le PDP-11, utilisaient également l'octal. Cet héritage persiste sous Linux, où la commande chmod utilise toujours octal pour spécifier chacun des champs "rwx" à trois bits.

Encore quelques anecdotes - CompuServe, qui était un service en ligne à distance largement utilisé dans les années 1980 et au début des années 1990 (avant d'être éclipsé par AOL), fonctionnait sur des mini-ordinateurs DEC, au moins à l'origine. Tous les identifiants d'utilisateur étaient numériques, et à un moment donné, j'ai fait l'observation qu'ils n'ont jamais inclus de 8 ou 9, donc ils étaient en octal. Mon ancien ID CIS était 70205.

17
tcrosley

Heathkit les a utilisés pour le panneau avant de leur H-8 et pour les listes de langage d'assemblage de leur logiciel de panneau avant (appelé PAM-8). Sortir ensemble, je sais.

enter image description here

De nos jours, les octales sont très rares; tout le monde semble utiliser hex. Mais les nombres ressemblent toujours à des nombres en octal, et vous n'avez pas besoin d'une rangée supplémentaire de touches pour les chiffres de A à F.

11
Robert Harvey

Une des raisons pour lesquelles octal voit l'utilisation est parce que c'est la plus grande base qui est une puissance de 2 pour laquelle vous n'avez pas besoin de caractères spéciaux - c'est-à-dire que tous les chiffres peuvent être numériques. La base 16 (la suivante par rapport à la base 8) nécessite des chiffres non numériques (généralement A, B, C, D, E, F).

6
tylerl

Quiconque a besoin d'exprimer des combinaisons de bits groupés en trois.

Pourquoi quelqu'un utilise-t-il l'hex?


Les choses du haut de ma tête qui sont exprimées en nombres octaux:

  • Codes émis par les transpondeurs mode 3A dans les avions
  • Certaines valeurs trouvées sur le bus avionique ARINC 429
  • Adresses SCSI
  • Codes clés dans la bibliothèque ncurses
5
Blrfl

J'utilise octal tous les jours. Chaque fois que j'ai besoin de chmoder un fichier, j'utilise octal (je suis antérieur à la notation u + r ...). Chaque fois que je veux incorporer un caractère de contrôle dans une chaîne, j'utilise octal ... (Oui, je pourrais utiliser hex, mais octal est ce que j'utilise).

5
Majenko

À l'époque où je travaillais sur les mainframes CDC (avec un mot 60 bits, un mot 12 bits pour le PPU), tous les vidages de mémoire et autres ont été effectués en octal (20 chiffres octaux par mot, 4 par mot PPU).

5
Jerry Coffin

Comme la notation hexadécimale, la notation octale est parfois utilisée pour spécifier des codes de caractères. Il peut être pratique pour la même raison que l'hexadécimal: il est plus compact que binaire, mais très facile à traduire en binaire dans votre tête.

3
Caleb

Un peu de côté, mais une utilisation publique est sur le métro de Londres. Chaque train a à la fois une identité physique et une identité distincte dans les horaires qui sont affichés en service - voir ici: https://upload.wikimedia.org/wikipedia/commons/4/49/LUL-S -Stock-at-Watford.jpg (notez le 402 en haut de l'affichage de destination). Bien que l'électronique des écrans soit basée sur les décimales standard, vous ne voyez jamais les chiffres 8 ou 9 car ils sont liés au matériel octal hérité du système de signalisation.

2
Julia Hayward

Comme Hex, les nombres octaux sont faciles à convertir à partir de binaires. Regroupez simplement les chiffres binaires en groupes de trois, en commençant par la droite.

10010101110  // binary

// conversion
(010)(010)(101)(110)
// so, in octal we have...
(2)(2)(5)(6)
2256

10010101110 (base 2) == 2256 (base 8)
2
Ed S.

Nan. Je ne les ai jamais utilisés. Pas même pour définir les autorisations de fichiers, car je le fais si rarement que je le trouve difficile à lire.

Alors oui, il y a l'avantage évident de la conversion de et vers binaire.
Cependant, comme l'a déjà souligné @Mason, hex est beaucoup plus "naturel", car 2 chiffres hex font un octet. Il est pratique pour représenter les couleurs RVB/ARGB 24/32 bits, les adresses IP, les masques d'octets, etc. Octal de l'autre côté n'est pas vraiment pratique, car vous avez rarement des scénarios où vous travaillez en termes de groupes 3 bits.

Les autorisations de fichiers sont en fait la seule chose à laquelle je pouvais penser. Et s'il n'y a pas de domaine d'utilisation pour l'instant, je doute qu'il y en aura un. Depuis les 20 dernières années, l'espace est devenu si bon marché, il est devenu très rare de regrouper les informations aussi étroitement, au détriment de l'alignement, de la facilité d'utilisation et de l'extensibilité.

2
back2dos