Pourquoi les nombres hexadécimaux sont-ils préfixés par 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 pourquoi 0x a été choisi.

326
demandé sur Thomas Bratt 2010-04-20 00:33:01

4 réponses

Histoire courte: Le 0 indique à l'analyseur qu'il a affaire à une constante (et non à un identifiant/mot réservé). Quelque chose est encore nécessaire pour spécifier la base de nombres: le x est un choix arbitraire.

Longue histoire: dans les années 60, les systèmes de nombres de programmation répandus étaient décimaux et octal - les mainframes avaient 12, 24 ou 36 bits par octet, ce qui est bien 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 à la place. C'est génial parce que

  1. une constante entière se compose désormais toujours d'un seul jeton,
  2. l'analyseur peut toujours dire tout de suite qu'il a une constante,
  3. l'analyseur peut immédiatement dire que la base (0 est la 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 valables. Comme les octales étaient encore nécessaires pour d'autres machines, 0x a été arbitrairement choisi (00 a probablement été exclu comme maladroit).

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

355
répondu Řrřola 2011-01-03 00:42:39

Note: Je ne connais pas la bonne réponse, mais ce qui suit n'est que ma spéculation personnelle!

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

04524 // octal, leading 0

Imaginez avoir besoin de trouver un système pour désigner les nombres hexadécimaux, et notez que nous travaillons dans un environnement de style C. Que diriez-vous de finir avec H comme l'assemblage? Malheureusement, vous ne pouvez pas - cela vous permettrait de créer des jetons qui sont des identifiants valides (par exemple. vous pouvez nommer une variable la même chose) qui cela ferait 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 caractère 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?

À la fin, pour une raison quelconque, ils ont décidé de mettre un x après un 0 pour désigner hexadécimal. Il est sans ambiguïté car il commence toujours par un caractère numérique, donc ne peut pas être un identifiant valide, et est probablement basé sur la convention octale d'un premier 0.

0xFF00 // definitely not an identifier!
86
répondu AshleysBrain 2010-04-22 12:59:53

SIMPLE

C'est un préfixe pour indiquer 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 de 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 de 0x term. Généralement, nous pouvons comprendre par (6400)16 ou (6400)8 ou que ce soit ..

Pour Binaire, il sera soit

0b00000001

L'espoir a aidé d'une certaine façon.

Bonne journée,

17
répondu loyola 2015-07-23 08:21:52

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 parce que ' x ' sonne comme hex.

Juste mon opinion, mais je pense que c'est logique.

Bonne Journée!

2
répondu Johnny Low 2017-04-27 00:53:09