Dove e quando ha avuto origine la convenzione "0x" per i letterali esadecimali?

Aug 16 2020

All'inizio degli anni '80, C usava 0xcome prefisso per indicare letterali interi espressi in esadecimali, ad esempio 0xCAFE. Questo non esisteva in B nel 1972, sebbene B supportasse letterali interi ottali tramite un 0prefisso.

Dove e quando è stato 0xutilizzato per la prima volta questo prefisso?

Risposte

36 Raffzahn Aug 16 2020 at 13:28

Questo non esisteva in B nel 1972, sebbene B supportasse letterali interi ottali tramite un prefisso 0.

Vero, ma il predecessore di B, BCPL, aveva una notazione di #per ottale e #xper esadecimale. Quindi l'idea ha "saltato" una generazione.


La storia del C consiste nella rimozione di funzionalità da aggiungere di nuovo in seguito ... nel bene e nel male.

  • CPL (Combined Programming Language) è stato sviluppato a Cambridge e Londra come Algol semplificato per la programmazione del sistema (* 1). È stato implementato nel 1965/66 per EDSAC 2, Atlas e IBM 7094.

  • BCPL (Basic CPL) era, come suggerisce il nome una versione semplificata di CPL, implementata per la prima volta nel 1967 su un IBM 7094 (* 2).

  • B era di nuovo un BCPL semplificato (* 3, * 4), adattato al PDP-7 nel 1969.

  • C è stato sviluppato tramite NB (New B) per il PDP-11 nel 1972ff, aggiungendo (di nuovo in) funzionalità.

CPL utilizzato #per denotare costanti ottali. Non c'era davvero bisogno di esadecimale, poiché tutte le macchine per cui era implementato avevano dimensioni di parola divisibili per 3 e utilizzavano caratteri a 6 bit per l'output.

BCPL si è evoluto nel tempo (piuttosto breve). Sebbene dall'inizio #fosse usato per marcare un numero ottale, fu presto integrato da #bbinario #xper esadecimale e persino #oper ottale. Queste aggiunte erano specifiche in termini di tempo e implementazione, ma almeno sono #xdiventate rapidamente uno standard.

B è sceso di #xnuovo con l'intera #notazione (* 5) a favore di uno zero precedente, semplificando il parser. Poiché il PDP-7 era un multiplo di una macchina di 3 parole, ottale era l'unica notazione specifica per macchina necessaria (* 6,7).

C a sua volta è stato sviluppato per il PDP-11, per il quale, come macchina a 16 bit, molte costanti dipendenti dalla macchina vengono naturalmente in esadecimale - per non parlare del byte a 8 bit e della segmentazione ASCII in gruppi di 32. Ora è stata considerata la reintroduzione di una notazione esadecimale utile - solo questa volta rimanendo con l'idea di uno zero precedente.


* 1 - Vale davvero la pena dare un'occhiata a CPL. Sebbene abbia già molte delle basi del C, come i puntatori alle parole come elemento di base, contiene anche diverse funzionalità che sembrano abbastanza non convenzionali da oggi. Ad esempio a = bcnon assegna la variabile bc ad a, ma il prodotto di b per c. Gli identificatori multi-carattere dovevano iniziare con lettere maiuscole. Questa potrebbe anche essere l'origine del tanto amato caso del cammello.

* 2 - E un modello 35 TTY, che a quel tempo non aveva parentesi graffe o quadrate, quindi sono stati aggiunti i digrafi. Simile senza barra rovesciata, quindi è *stato utilizzato per caratteri speciali nelle stringhe.

* 3 - Oltre ad alcuni interruttori divertenti. Aveva Algol +:=come incarico aumentato, quindi ha usato CPL e BCPL =+, mentre B è tornato a +=.

* 4 - Forse un po 'di PL / ho aggiunto.

* 5 - È sceso in modo simile anche #come parte degli operatori di confronto

* 6 - Vale sempre la pena tenere presente che il byte a 8 bit e la corrispondente notazione esadecimale sono stati introdotti solo poco prima con IBM / 360.

* 7 - Una nota a margine interessante potrebbe essere che CTC ha usato anche uno zero precedente per le costanti ottali nel loro Assembler per il 1970 Datapoint 2200 . Quindi, sebbene non conosca alcuna relazione diretta, è piuttosto interessante che abbiano trovato la stessa soluzione nello stesso momento in cui ha fatto Thompson.