Pourquoi les nombres hexadécimaux portent-ils le préfixe 0x
? Je comprends l'utilisation du préfixe mais je ne comprends pas la signification de la raison pour laquelle 0x
a été choisi.
Short story: Le 0
indique à l'analyseur qu'il a affaire à une constante (et non à un identifiant/mot réservé). Quelque chose reste nécessaire pour spécifier la base numérique: la x
est un choix arbitraire.
Long récit: Dans les années 60, les systèmes de numération de programmation les plus répandus étaient décimaux et octaux - les unités centrales avaient 12, 24 ou 36 bits. par octet, ce qui est divisible par 3 = log2 (8).
Le langage BCPL utilisait la syntaxe 8 1234
pour les nombres octaux. Lorsque Ken Thompson a créé B à partir de BCPL, il a plutôt utilisé le préfixe 0
. C'est bien parce que
0
est identique dans les deux bases),00005 == 05
), et#123
).Lorsque C a été créé à partir de B, le besoin de nombres hexadécimaux est apparu (le PDP-11 avait des mots de 16 bits) et tous les points ci-dessus étaient toujours valables. Comme les octals étaient toujours nécessaires pour les autres machines, 0x
a été choisi de manière arbitraire (00
a probablement été exclu, car il est gênant).
C # est un descendant de C, il hérite donc de la syntaxe.
Remarque: je ne connais pas la bonne réponse, mais la liste ci-dessous n’est que ma spéculation personnelle!
Comme il a été mentionné, un 0 avant qu'un nombre signifie qu'il est octal:
04524 // octal, leading 0
Imaginez avoir besoin de créer un système pour désigner les nombres hexadécimaux et noter que nous travaillons dans un environnement de style C. Que diriez-vous de terminer avec h comme assemblage? Malheureusement, vous ne pouvez pas - cela vous permettrait de créer des jetons qui sont des identifiants valides (par exemple, vous pourriez nommer une variable de la même manière), ce qui créerait certaines ambiguïtés désagréables.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Vous ne pouvez pas mener avec un personnage pour la même raison:
xFF00 // also valid identifier
L'utilisation d'un hachage a probablement été supprimée car elle est en conflit avec le préprocesseur:
#define ...
#FF00 // invalid preprocessor token?
En fin de compte, pour une raison quelconque, ils ont décidé de mettre un x après un 0 pour indiquer hexadécimal. Il est sans ambiguïté puisqu'il commence toujours par un caractère numérique et ne peut donc pas être un identificateur valide. Il est probablement basé sur la convention octale d'un 0 non significatif.
0xFF00 // definitely not an identifier!
C'est un préfixe pour indiquer que le nombre est en hexadécimal plutôt que dans une autre base. Le langage de programmation C l'utilise pour informer le compilateur.
Exemple:
0x6400
se traduit par 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Lorsque le compilateur lit 0x6400
, il comprend que le nombre est hexadécimal à l'aide du terme x. Habituellement, nous pouvons comprendre par (6400)16 ou (6400)8 ou peu importe ..
Pour binaire ce serait:
0b00000001
J'espère que j'ai aidé d'une certaine manière.
Bonne journée!
Le 0 précédent est utilisé pour indiquer un nombre en base 2, 8 ou 16.
À mon avis, 0x a été choisi pour indiquer hex car "x" ressemble à hex.
Juste mon avis, mais je pense que cela a du sens.
Bonne journée!