Pourquoi les préfixes hexadécimaux sont-ils 0x
et rien d'autre? Je comprends l'utilisation du préfixe, mais je ne comprends pas la signification de 0x
.
Réponses
Trop de publicités?Histoire courte: L' 0
indique à l'analyseur, il ne traite qu'avec une constante (et non pas d'un identifiant/mot réservé). Quelque chose est toujours nécessaire de spécifier le nombre de base: l' x
est un choix arbitraire.
C'est une longue histoire: Dans les années 60, la forte prévalence de la programmation nombre de systèmes ont été décimal et octal - mainframes, 12, 24 ou 36 bits par octet, ce qui est bien divisible par 3 = log2(8).
Le BCPL langage utilisé la syntaxe 8 1234
pour les nombres octaux. Quand Ken Thompson créé B de BCPL, il a utilisé l' 0
préfixe à la place. C'est génial parce que
- une constante entière maintenant, consiste toujours en un seul jeton,
- l'analyseur peut encore le dire tout de suite, il y a une constante,
- l'analyseur peut dire immédiatement à la base (
0
est le même dans les deux bases), - c'est mathématiquement sane (
00005 == 05
), et - aucune précieux caractères spéciaux sont nécessaires (comme en
#123
).
Quand C a été créé à partir de B, la nécessité pour les nombres hexadécimaux de naissance (le PDP-11 avaient des mots de 16 bits) et tous les points ci-dessus sont toujours valables. Depuis octals étaient encore nécessaires pour les autres machines, 0x
a été choisi arbitrairement (00
a probablement été jugé maladroit).
Le C# est un descendant de C, donc il hérite de la syntaxe.
Note: je ne connais pas la réponse correcte, mais le dessous est juste mon personnel de la spéculation!
Comme il a été mentionné un 0 avant un certain nombre signifie qu'il est octal:
04524 // octal, leading 0
Imaginez avoir à venir avec un système pour désigner les nombres hexadécimaux, et remarque nous travaillons dans un style C environnement. Comment sur la fin avec h de type de montage? Malheureusement, vous ne pouvez pas, il vous permettra de faire des jetons qui sont des identificateurs valides (par exemple. vous pouvez nommer une variable la même chose) ce qui serait désagréable d'ambiguïtés.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Vous ne pouvez pas conduire avec un personnage pour la même raison:
xFF00 // also valid identifier
En utilisant une table de hachage a probablement été jeté car il est en conflit avec le préprocesseur:
#define ...
#FF00 // invalid preprocessor token?
À la fin, pour quelque raison que ce soit, ils ont décidé de mettre un x après un 0 pour désigner hexadécimal. Il est sans équivoque, car il commence toujours avec un certain nombre de caractères ne peut donc pas être un identificateur valide, et est probablement en fonction de la octal convention de un 0.
0xFF00 // definitely not an identifier!
Il semble avoir découle d’une convention de C : http://en.wikipedia.org/wiki/Hexadecimal#Representing_hexadecimal .