Perché i numeri esadecimali hanno il prefisso come 0x? Capisco l'uso del prefisso ma non capisco il significato del perché è 0xstato scelto.
Perché i numeri esadecimali hanno il prefisso come 0x? Capisco l'uso del prefisso ma non capisco il significato del perché è 0xstato scelto.
Risposte:
Breve storia: Il 0dice 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 1234per i numeri ottali. Quando Ken Thompson ha creato B da BCPL, ha usato 0invece 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, 0xfu scelto arbitrariamente ( 00probabilmente fu escluso come imbarazzante).
C # è un discendente di C, quindi eredita la sintassi.
0xnel corso 00ero preferenza / disagio. 00romperebbe il codice esistente. 0010come ottale è 8, mentre 0010come esadecimale sarebbe 16. Non potevano usare alcun numero come indicatore di seconda cifra (eccetto 8o 9, e nessuno dei due ha alcun significato relativo all'esadecimale), quindi una lettera è un must. E questo lascia uno 0ho 0x( H e X idecimale). Da questo punto sembra che sia davvero tornato alle preferenze.
0prefisso 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 8o 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!
0xFFAB1234deve 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:
0x6400si 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 xpoteva 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!