Dove sono utili gli ottali? [chiuso]

33

Ho appena sbattuto la testa contro il tavolo per circa 20 minuti guardando un bizzarro bug in PHP, e poi ho capito che c'era ottale. Il <% (* & # > ottale.

In breve, ho aggiunto alcuni valori letterali con zeri in modo che il codice fosse allineato, lo so, grande errore. Hai dimenticato gli ottali.

La domanda è: qualcuno usa gli ottali per qualcosa di diverso dai permessi dei file? (Personalmente preferisco chmod ugo+rwx ma capisco che se devono essere generati in modo programmatico, è utile usare gli ottali.) Ma sono utili in qualsiasi altra situazione?

    
posta Petruza 04.08.2011 - 20:35
fonte

11 risposte

40

Secondo Wikipedia , gli ottali non sono così comuni come un tempo. Come altri hanno già menzionato, in passato, i sistemi utilizzavano una parola 12/24/36 bit, che è più facilmente rappresentata in ottale che esadecimale, ma attualmente, le architetture x86 e i64 usano un 16/32/64 bit parola, che è più facilmente rappresentata in esadecimale e decisamente brutta in ottale.

Gli usi correnti, tuttavia, includono:

Si noti che i linguaggi di programmazione moderni a volte non supportano più gli ottali a causa della mancanza di casi d'uso e del potenziale di bug. C # è un esempio, come ha scritto Eric Lippert nella TCPL 3a e 4a edizione :

C# does not support octal literals, for two reasons. First, hardly anyone uses octal literals these days. Second, if C# supported octal in the standard "leading zero means octal" format, then it would be a potential source of errors. Consider this code:

    FlightNumber = 0541;

Clearly this expression is intended as a decimal literal not an octal literal.

Correlati, e solo per riferimento e curiosità, Codice, La lingua nascosta dell'hardware del computer ha un'eccellente facilità - seguire la spiegazione su ottale e altri sistemi numerici a pagina 55 - 63 .

    
risposta data 04.08.2011 - 23:05
fonte
16

Octal è stato ampiamente utilizzato circa 50 anni fa da Digital Equipment Corp. (DEC) e da altre società che avevano computer con una parola di 12 bit (ad esempio il PDP-8) o altri multipli di sei, come 18 e 36 ( es. UNIVAC 1108). Ho usato sia il PDP-8 che l'UNIVAC 1108 nella scuola elementare. I caratteri in entrambe le macchine usavano tipicamente sei bit, non 8.

Formato di istruzione PDP-8 - nota che i bit sono numerati da 0 a > 11. Il bit 0 era l'MSB (bit più significativo).

Quando DEC uscì con il PDP-11 a 16 bit, continuarono a usare ottale nella loro documentazione invece che in esadecimale come quelli usati dagli altri produttori di minicomputer che uscivano con macchine a 16 bit al momento. Ciò è probabilmente dovuto ai molteplici campi a 3 bit nei formati di istruzione PDP-11 come Register, Mode e Src / Dest che si prestavano a essere decodificati come una cifra ottale. (Grazie a John Strohm per averlo indicato.)

È interessante notare che quando Motorola è uscito con il suo 68000 microprocessore, che è stato pesantemente influenzato dal PDP-11 e aveva gli stessi campi di modalità e registro a 3 bit nelle istruzioni, ha scelto di utilizzare solo esadecimale nella propria documentazione.

Poiché il PDP-11 utilizzava la notazione ottale, i codici di autorizzazione originali per Unix, che apparvero per la prima volta sul PDP-11, usavano anche l'ottale. Questa eredità persiste in Linux, dove il comando chmod usa ancora ottale per specificare ciascuno dei tre campi 'rwx'.

Qualche altra curiosità - CompuServe, che era un servizio online dial-up ampiamente utilizzato negli anni '80 e all'inizio degli anni '90 (prima di essere messo in ombra da AOL), funzionava con i minicomputer della DEC, almeno in origine. Tutti gli ID utente erano numerici e ad un certo punto ho osservato che non includevano mai alcun 8 o 9 in essi, quindi erano in ottale. Il mio vecchio ID CIS era 70205.

    
risposta data 04.08.2011 - 22:05
fonte
11

Heathkit li ha usati per il pannello frontale del loro H-8 e per gli elenchi delle lingue di assemblaggio del loro software del pannello frontale (chiamato PAM-8). Datare me stesso, lo so.

Oggigiorno gli ottali sono molto rari; tutti sembrano usare hex. Ma i numeri sembrano ancora numeri in ottale e non è necessaria una riga aggiuntiva di tasti per le cifre da A a F.

    
risposta data 04.08.2011 - 20:53
fonte
5

Io uso l'ottale ogni giorno. Ogni volta che ho bisogno di chmod un file io uso ottale (ho pre-data la notazione di u + r ...). Ogni volta che voglio incorporare un carattere di controllo all'interno di una stringa uso ottale ... (Sì, potrei usare hex, ma ottale è quello che uso).

    
risposta data 04.08.2011 - 21:02
fonte
5

Chiunque abbia bisogno di esprimere combinazioni di bit raggruppati in tre.

Perché qualcuno usa hex?

Cose fuori dalla mia testa che sono espresse come numeri ottali:

  • Codici squawked dai transponder Mode 3A negli aeroplani
  • Determinati valori trovati sul bus avionico ARINC 429
  • Indirizzi SCSI
  • Codici chiave nella libreria ncurses
risposta data 04.08.2011 - 20:47
fonte
5

Indietro quando lavoravo su mainframe CDC (con una parola di 60 bit, parola di 12 bit per la PPU), tutti i core dump e simili venivano fatti in ottale (20 cifre ottali per parola, 4 per parola PPU).

    
risposta data 05.08.2011 - 01:05
fonte
4

Una delle ragioni per cui Octal vede l'uso è perché è la più grande base che è una potenza di 2 per cui non hai bisogno di caratteri speciali - cioè, tutte le cifre possono essere numeriche. La Base 16 (la successiva dalla base 8) richiede cifre non numeriche (solitamente A, B, C, D, E, F).

    
risposta data 05.08.2011 - 04:39
fonte
3

Come esadecimale, la notazione ottale viene talvolta usata per specificare i codici dei caratteri. Può essere utile per la stessa ragione per cui è esadecimale: è più compatto del binario, ma molto facile da tradurre in binario nella tua testa.

    
risposta data 04.08.2011 - 20:44
fonte
2

Come Hex, i numeri ottali sono facili da convertire da binari. Raggruppa le cifre binarie in gruppi di tre, iniziando a destra.

10010101110  // binary

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

10010101110 (base 2) == 2256 (base 8)
    
risposta data 04.08.2011 - 20:48
fonte
2

Un po 'a parte, ma un uso pubblico è nella metropolitana di Londra. Ogni treno ha sia un'identità fisica, sia un'identità separata nelle pianificazioni che vengono visualizzate quando è in servizio - vedi qui: link (notare il 402 nella parte superiore del display di destinazione). Sebbene l'elettronica per i display sia basata su decimali standard, non si vedono mai le cifre 8 o 9 perché sono legate all'hardware ottale basato su legacy nel sistema di segnalazione.

    
risposta data 15.09.2015 - 11:23
fonte
1

No. Non li ho mai usati. Nemmeno per impostare i permessi dei file, perché lo faccio così raramente che trovo difficile da leggere.

Quindi sì, c'è l'ovvio vantaggio della conversione da e verso il binario.
Tuttavia, come già sottolineato da @Mason, hex è molto più "naturale", perché 2 cifre esadecimali formano un byte. È utile per rappresentare i colori RGB / ARGB a 24/32 bit, gli indirizzi IP, le maschere di byte ecc. Octal sull'altro lato non è molto pratico, perché raramente hai scenari in cui lavori in termini di gruppi a 3 bit.

Le autorizzazioni per i file sono infatti l'unica cosa a cui posso pensare. E se non c'è spazio di utilizzo al momento, dubito che ce ne sarà mai uno. Dagli ultimi 20 anni lo spazio è diventato così economico, è diventato molto raro imbustare le informazioni in modo così stretto, a costo di allineamento, facilità d'uso ed estensibilità.

    
risposta data 04.08.2011 - 21:51
fonte

Leggi altre domande sui tag