Où les octaux sont-ils utiles? [fermé]

36

Je viens de me cogner la tête contre la table pendant environ 20 minutes en regardant un bogue totalement étrange en PHP, puis j'ai réalisé qu'il y avait un octal. Le <% (* & #> octal.

En bref, j'ai rempli des littéraux avec des zéros afin que le code soit aligné, je sais, grosse erreur. J'ai oublié les octals.

La question est de savoir si quelqu'un utilise les octaux pour autre chose que les autorisations de fichiers. ( chmod ugo+rwxPersonnellement, je préfère mais je comprends que s’ils doivent être générés par programme, il est utile d’utiliser des octaux.) Mais sont-ils utiles dans une autre situation?

Petruza
la source
16
Option A: Blâmez-vous. Option B: Blâmez le monde. Option C: rire comme vous avez appris quelque chose.
Job
12
@Petrozza - IMO l'utilisation du style C pour indiquer un octal n'était jamais un bon choix, mais c'est une histoire - probablement un peu du patrimoine C, même s'il est peut-être encore plus ancien. Je pense qu'Ada a l'une des meilleures conventions: un nombre octal serait écrit 8 # 1234567 #, un nombre hexadécimal 16 # abcdef #, etc. et tous sont visuellement évidents et faciles à comprendre.
Steve314
2
@Petruza Votre question, dans sa forme originale, n'était pas constructive pour ce site, et la communauté l'a améliorée pour qu'elle reste ouverte: veuillez consulter la FAQ pour plus d'informations sur les raisons pour lesquelles les internautes le font et pourquoi nous l'encourageons. Si vous avez d'autres questions ou préoccupations, veuillez les poser sur notre site de méta-discussion , pas dans votre question.
11
Option D: "blâmer PHP" est toujours le bon choix, quel que soit le problème
Cephalopod
2
@ Steve314 je suis totalement d'accord. Un autre exemple remarquable est Python où ils ont le 0opréfixe (ce qui est cohérent avec 0xet 0bpeut-être un peu difficile à distinguer 00). Et depuis Python 3, les zéros supplémentaires sont une erreur de syntaxe pour éviter ce genre de bugs.
5gon12eder

Réponses:

42

Selon Wikipédia , les octaux ne sont plus aussi courants qu'avant. Comme d'autres l'ont déjà mentionné, dans le passé, les systèmes utilisaient un mot de 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 format de 16/32/64 bits. mot, qui est plus facilement représenté en hexadécimal et carrément moche en octal.

Les utilisations actuelles incluent toutefois:

Notez que les langages de programmation modernes ne prennent parfois plus en charge les octaux à cause du manque de cas d'utilisation et du risque de bugs. C # est un exemple, comme Eric Lippert l'a écrit dans la 3ème et 4ème édition de TCPL :

C # ne prend pas en charge les littéraux octaux, pour deux raisons. Premièrement, pratiquement personne n’utilise les littéraux octaux de nos jours. Deuxièmement, si le format octal pris en charge en C # dans le format standard «zéro non négligeable signifie octal», il constituerait alors une source potentielle d’erreurs. Considérons 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.

À propos, et juste pour référence et par curiosité, Code, Le langage caché du matériel informatique, propose une excellente explication facile à suivre sur les systèmes de numération octal et autres, pages 55 - 63 .

Abel
la source
1
Sur cette note, faites attention à Javascript lors du traitement des entrées utilisateur. parseInt(011)==9
Darien
3
C'est vraiment intéressant à propos de Yuki et Pamean. Je viens de penser que le comptage hexadécimal des doigts est relativement facile si vous utilisez l'intérieur de chaque doigt en utilisant une variante, comme celle-ci
octobre 5'11
@ Slomojo - vous pouvez compter jusqu'à 99 sur vos doigts , en fait ...
finement
3
+1 pour une réponse très complète. Grace Hopper a dit un jour qu'elle avait du mal à équilibrer son chéquier, car elle était devenue si compétente pour l'ajout en octal.
Macneil
14
@detly, si je sais que j'ai besoin de compter de grands nombres, j'utiliserai mes 10 chiffres sous forme de bits et compterai jusqu'à 1024 avec juste mes doigts (faites attention à qui vous montrez les numéros 4, 128 et 132 à).
zzzzBov
17

Octal était largement utilisé il y a environ 50 ans par Digital Equipment Corp. (DEC) et d'autres sociétés équipées d'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 au cycle supérieur. Les caractères dans les deux machines utilisaient généralement six bits, pas 8.

Format d'instruction PDP-8

Format d'instruction PDP-8 - notez que les bits sont numérotés 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 octal dans leur documentation au lieu d’hexadécimal, contrairement à ce qu’utilisaient les autres fabricants d’ordinateurs mini équipés d’ordinateurs 16 bits à l’époque. Cela était probablement dû aux multiples champs de 3 bits contenus dans les formats d'instruction PDP-11 tels que Register, Mode et Src / Dest, qui se prêtaient au décodage sous forme de chiffre octal. (Merci à John Strohm pour l'avoir signalé.)

Il est intéressant de noter que lorsque Motorola a sorti son microprocesseur 68000, fortement influencé par le PDP-11 et contenant les mêmes champs Mode et Registre 3 bits dans les instructions, ils ont choisi d’utiliser uniquement la méthode hexadécimale dans leur documentation.

Étant donné que le PDP-11 utilisait la notation octale, les codes d'autorisation d'origine pour Unix, qui figuraient 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 à trois bits «rwx».

Quelques autres astuces - CompuServe, qui était un service en ligne d'accès à distance très utilisé dans les années 1980 et au début des années 1990 (avant d'être occulté par AOL), fonctionnait sur les mini-ordinateurs DEC, du moins à l'origine. Tous les identifiants d’utilisateur étaient numériques, et à un moment donné, j’ai fait observer qu’ils n’incluaient jamais de 8 ou de 9, ils étaient donc en octal. Mon ancien numéro d'identification CIS était 70205.

tcrosley
la source
1
Votre commentaire sur la documentation PDP-11 est incorrect. Le PDP-11 avait 8 registres. R0-R5 étaient des registres à usage général. R6 était le pointeur de la pile et R7 était le PC. L'instruction MOV a pris deux numéros de registre à 3 bits et deux modes d'adressage à 3 bits. Octal capture parfaitement les champs de registre et de mode. (Je doute fortement que ce soit un accident.) L'utilisation de hexagone aurait tout confondu. PUSH et POP ne faisaient qu’adresser des modes utilisant R6. L'opérande immédiat était un mode d'adressage utilisant R7.
John R. Strohm
@ JohnR.Strohm Merci pour le commentaire sur les registres 3 bits. Je suis d'accord avec votre analyse et j'ai mis à jour ma réponse.
Tcrosley
Donc, DEC a travaillé en octobre. J'aurais juste dû utiliser des multiples de 3,32 bits pour éviter toute confusion.
user234461
C'est drôle de voir que je n'ai jamais considéré les autorisations Unix comme un nombre octal. J'y ai toujours pensé comme trois chiffres individuels écrits ensemble, chacun représentant les trois bits rwx, afin qu'ils puissent être octaux, décimaux ou même hexadécimaux.
Axl
11

Heathkit les utilisait pour le panneau avant de leur H-8 et pour les listes en langage assembleur de leur logiciel de panneau avant (appelé PAM-8). Je me sors, je sais.

entrez la description de l'image ici

De nos jours, les octaux 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 clés pour les chiffres de A à F.

Robert Harvey
la source
2
+1 pour le H-8. Bien qu’il soit octal à l’extérieur, le processeur était un 8080A, composé uniquement d’octets. Allez figger.
Blrfl
J'imagine qu'ils utilisaient octal pour être en commun avec le H-11 (doté d'un processeur PDP-11).
Jerry Coffin
2
Le 8080 avait des octets de 8 bits, mais le jeu d'instructions avait plus de sens si regardé en octal qu'en hex.
RBerteig
6

Octal est notamment utilisé parce que c'est la base la plus grande qui est une puissance de 2 pour laquelle vous n'avez pas besoin de caractères spéciaux - en d'autres termes, tous les chiffres peuvent être numériques. La base 16 (la suivante à partir de la base 8) nécessite des chiffres non numériques (généralement A, B, C, D, E, F).

tylerl
la source
Je sais que c'est vieux, mais pourquoi utiliser seulement des chiffres numériques serait-il préférable d'utiliser aussi des lettres?
Petruza le
5

J'utilise octal tous les jours. Chaque fois que j'ai besoin de modifier un fichier, j'utilise octal (je date d'avance 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).

Majenko
la source
2
+1 pour "mais ce que j'utilise en octal" :)
JoelFan
5

Tous ceux qui ont besoin d’exprimer des combinaisons de bits regroupés par trois.

Pourquoi est-ce que quelqu'un utilise l'hexagone?


Les choses qui me viennent à l’esprit 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 de clé dans la ncursesbibliothèque
Blrfl
la source
11
La différence est que hex est "naturel" comme un demi-octet. Deux chiffres hexadécimaux = 1 octet. Mais vous ne pouvez pas diviser les octets en chiffres octaux.
Mason Wheeler
2
La première ligne énonce l'évident. Le second fait une mauvaise analogie.
back2dos
3
Et hex est complètement non naturel pour tout ce qui doit être exprimé en groupes de trois bits comme les modes de fichiers Unix susmentionnés. Aucune loi ne stipule que les chiffres d'un système de numérotation particulier doivent s'aligner sur des octets. S'il existait, exprimer quelque chose sur un ordinateur en tant que base 10 serait une pratique pire que la base 8, qui s'aligne au moins avec des groupes de bits.
Blrfl
6
une chaîne hexagonale typique est évidemment une chaîne hexagonale. octal n'est pas.
Paul Nathan
1
@Blrfl: Combien d'entre eux ont mentionné "les" choses qui doivent être exprimées en groupes de trois bits ", en dehors de l'exemple canonique? Telle est la question, que vous avez laissée sans réponse jusqu'à présent. Au lieu de cela, vous faites encore une autre analogie pauvre. Il existe une utilisation réelle de la représentation décimale, car nous avons simplement appris à la manipuler. Lequel allez- vous calculer plus rapidement? 7 * 6ou 07 * 06? Nous utilisons des nombres décimaux pour représenter les nombres car nous pouvons mieux les gérer et des hexa pour représenter des nombres très proches de la façon dont la machine les stocke. Et nous le faisons beaucoup. Ce site est plein de preuves.
back2dos
5

À l'époque où je travaillais sur les ordinateurs centraux CDC (avec un mot de 60 bits, un mot de 12 bits pour le fichier PPU), toutes les sauvegardes de base et autres opérations étaient effectuées en octal (20 chiffres octaux par mot, 4 par mot PPU).

Jerry Coffin
la source
3

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

Caleb
la source
2

Comme Hex, les nombres octaux sont faciles à convertir à partir de binaires. Il suffit de grouper les chiffres binaires par 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)
Ed S.
la source
7
C'est évident. La question est de savoir quand cela est réellement utilisé .
back2dos
2
@ back2dos: n'hésitez pas à poster une réponse au lieu de laisser le même commentaire plusieurs fois.
Ed S.
4
@Ed S. Vous n'avez même pas essayé de répondre à la question. Vous avez dit quelque chose d'évident dont l'affiche originale connaissait presque certainement déjà la réponse. Comme les modérateurs ont l'habitude de le dire, ce n'est pas pour cela que nous visons. Voir meta.programmers.stackexchange.com/questions/1968/… pour plus d'informations.
btilly
@ back2dos, btilly - Les réponses sur les sites Stackexhange ne concernent pas que le PO, elles deviennent une ressource persistante pour tout lecteur qui passe. Tous les faits évidents , ne sont pas nécessairement évidents pour tout le monde, si cette réponse aide le penny-drop pour quelqu'un qu'il a de la valeur.
Octobre
2
@ Slomojo cependant, par cet argument, chaque question est susceptible de devenir un wiki pour chaque aspect lié à un sujet. Le fait est que cela ne répond pas à la question . Cette réponse peut certainement être valable ailleurs: "Comment convertir rapidement mentalement en octal?"
Nicole
2

Nan. Je ne les ai jamais utilisés. Même pas pour définir les permissions de fichiers, parce que je le fais si rarement que j'ai du mal à le lire.

Alors oui, il y a l'avantage évident de la conversion depuis et vers le binaire.
Cependant, comme l'a déjà souligné @Mason, hex est beaucoup plus "naturel", car 2 chiffres hexadécimaux forment un octet. Très pratique pour représenter les couleurs RGB / ARGB 24/32 bits, les adresses IP, les masques d'octets, etc. Octal n'est pas vraiment pratique, car vous avez rarement des scénarios dans lesquels 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’ya pas de domaine d’utilisation, je doute qu’il en existe un jour. Depuis 20 ans, l'espace est devenu si peu coûteux qu'il est devenu très rare de regrouper des informations aussi étroitement, au détriment de l'alignement, de la facilité d'utilisation et de l'extensibilité.

back2dos
la source
2

Un peu de côté, mais une utilisation publique est dans 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'écran de destination). Bien que les composants électroniques des affichages soient basés sur des décimales standard standard, vous ne voyez jamais les chiffres 8 ou 9 car ils sont liés au matériel hérité octal existant dans le système de signalisation.

Julia Hayward
la source