Perché i numeri esadecimali hanno il prefisso come 0x
? Capisco l'uso del prefisso ma non capisco il significato del perché è 0x
stato scelto.
Perché i numeri esadecimali hanno il prefisso come 0x
? Capisco l'uso del prefisso ma non capisco il significato del perché è 0x
stato scelto.
Risposte:
Breve storia: Il 0
dice il parser è che fare con una costante (e non una parola identificatore / riservato). Qualcosa è ancora necessario per specificare la base numerica: x
è una scelta arbitraria.
Lunga storia: negli anni '60, i sistemi di numerazione di programmazione prevalenti erano decimali e ottali - i mainframe avevano 12, 24 o 36 bit per byte, che è ben divisibile per 3 = log2 (8).
Il linguaggio BCPL usava la sintassi 8 1234
per i numeri ottali. Quando Ken Thompson ha creato B da BCPL, ha usato 0
invece il prefisso. Questo è fantastico perché
0
è la stessa in entrambe le basi),00005 == 05
) e#123
).Quando C è stato creato da B, è emersa la necessità di numeri esadecimali (il PDP-11 aveva parole a 16 bit) e tutti i punti sopra erano ancora validi. Poiché gli ottali erano ancora necessari per altre macchine, 0x
fu scelto arbitrariamente ( 00
probabilmente fu escluso come imbarazzante).
C # è un discendente di C, quindi eredita la sintassi.
0x
nel corso 00
ero preferenza / disagio. 00
romperebbe il codice esistente. 0010
come ottale è 8
, mentre 0010
come esadecimale sarebbe 16
. Non potevano usare alcun numero come indicatore di seconda cifra (eccetto 8
o 9
, e nessuno dei due ha alcun significato relativo all'esadecimale), quindi una lettera è un must. E questo lascia uno 0h
o 0x
( H e X idecimale). Da questo punto sembra che sia davvero tornato alle preferenze.
0
prefisso per ottale ha causato così tanti problemi nel corso degli anni. In particolare in paesi come il Regno Unito dove i numeri di telefono iniziano con a 0
. Javascript e molte altre lingue li analizzerebbero come ottali, modificando il numero prima di memorizzarli. Per aggiungere al divertimento, un popolare prodotto di database tornerebbe silenziosamente all'analisi decimale se il numero contenesse un 8
o 9
.
Nota: non conosco la risposta corretta, ma il seguito è solo la mia speculazione personale!
Come è stato menzionato uno 0 prima che un numero significhi che è ottale:
04524 // octal, leading 0
Immagina di dover inventare un sistema per indicare numeri esadecimali e nota che stiamo lavorando in un ambiente in stile C. Che ne dici di finire con h come assembly? Sfortunatamente non puoi - ti permetterebbe di creare token che sono identificatori validi (es. Potresti nominare una variabile la stessa cosa) che renderebbe alcune brutte ambiguità.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Non puoi guidare un personaggio per lo stesso motivo:
xFF00 // also valid identifier
L'uso di un hash è stato probabilmente eliminato perché in conflitto con il preprocessore:
#define ...
#FF00 // invalid preprocessor token?
Alla fine, per qualsiasi motivo, hanno deciso di inserire una x dopo uno 0 iniziale per indicare esadecimale. È inequivocabile poiché inizia ancora con un carattere numerico, quindi non può essere un identificatore valido ed è probabilmente basato sulla convenzione ottale di uno 0 iniziale.
0xFF00 // definitely not an identifier!
0xFFAB1234
deve essere scritto come 0FFAB1234h
. Me lo ricordo da asm inline in Pascal quando ero giovane stackoverflow.com/q/11733731/995714
È un prefisso per indicare che il numero è in esadecimale piuttosto che in qualche altra base. Il linguaggio di programmazione C lo usa per dire al compilatore.
Esempio:
0x6400
si traduce in 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Quando il compilatore legge 0x6400
, Comprende che il numero è esadecimale con l'aiuto del termine 0x . Di solito possiamo capire da (6400) 16 o (6400) 8 o qualsiasi altra cosa.
Per binario sarebbe:
0b00000001
Spero di aver aiutato in qualche modo.
Buona giornata!
x6400
? Il x
poteva ancora essere utilizzato per inferire esadecimale.
Lo 0 precedente viene utilizzato per indicare un numero in base 2, 8 o 16.
Secondo me, 0x è stato scelto per indicare hex perché 'x' suona come hex.
Solo la mia opinione, ma penso che abbia senso.
Buona giornata!