Pourquoi les nombres hexadécimaux sont-ils préfixés avec 0x?

Pourquoi les nombres hexadécimaux sont-ils préfixés comme 0x ? Je comprends l’utilisation du préfixe mais je ne comprends pas la signification de la raison pour laquelle 0x été choisi.

Histoire courte: le 0 indique à l’parsingur qu’il traite d’une constante (et non d’un identifiant / mot réservé). Quelque chose est encore nécessaire pour spécifier la base numérique: le x est un choix arbitraire.

Histoire longue: dans les années 60, les systèmes à numéros de programmation les plus répandus étaient décimaux et octaux – les ordinateurs centraux 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 utilisé le préfixe 0 place. C’est génial parce que

  1. une constante entière se compose toujours d’un seul jeton,
  2. l’parsingur peut encore dire tout de suite qu’il a une constante,
  3. l’parsingur peut immédiatement dire à la base ( 0 est le même dans les deux bases),
  4. c’est mathématiquement sain ( 00005 == 05 ), et
  5. aucun caractère spécial précieux n’est nécessaire (comme dans #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 valides. Comme les octales étaient toujours nécessaires pour d’autres machines, 0x été choisi de manière arbitraire ( 00 était probablement exclu comme inconfortable).

C # est un descendant de C, il hérite donc de la syntaxe.

Note: Je ne connais pas la bonne réponse, mais ce qui précède n’est que ma spéculation personnelle!

Comme cela a été mentionné, un 0 avant un nombre signifie qu’il est en octal:

 04524 // octal, leading 0 

Imaginez que vous ayez besoin d’un système pour indiquer les nombres hexadécimaux et notez 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 des 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é rejetée car elle est en conflit avec le préprocesseur:

 #define ... #FF00 // invalid preprocessor token? 

En fin de compte, pour quelque raison que ce soit, ils ont décidé de mettre un x après un 0 pour désigner l’hexadécimal. Il est sans ambiguïté car il commence toujours par un caractère numérique, il ne peut donc pas être un identifiant valide, et est probablement basé sur la convention octale d’un 0 initial.

 0xFF00 // definitely not an identifier! 

SIMPLE

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 dire au compilateur.

Exemple :

0x6400 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 avec l’aide du terme 0x . Habituellement, nous pouvons comprendre par (6400) 16 ou (6400) 8 ou autre chose ..

Pour binary ce sera

0b00000001

Hope A 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 un hexagone car «x» ressemble à un hex.

Juste mon avis, mais je pense que cela a du sens.

Bonne journée!