Pourquoi les nombres hexadécimaux sont-ils préfixés 0x
? Je comprends l'utilisation du préfixe mais je ne comprends pas la signification de pourquoi a 0x
été choisi.
Pourquoi les nombres hexadécimaux sont-ils préfixés 0x
? Je comprends l'utilisation du préfixe mais je ne comprends pas la signification de pourquoi a 0x
été choisi.
Réponses:
Petite histoire: le 0
dit à l'analyseur qu'il s'agit d'une constante (et non d'un identifiant / mot réservé). Quelque chose est encore nécessaire pour spécifier la base numérique: x
c'est un choix arbitraire.
Longue histoire: dans les années 60, les systèmes de numéros de programmation répandus étaient décimaux et octaux - les ordinateurs centraux avaient 12, 24 ou 36 bits par octet, ce qui est bien divisible par 3 = log2 (8).
Le langage BCPL utilise la syntaxe 8 1234
des nombres octaux. Lorsque Ken Thompson a créé B à partir de BCPL, il a utilisé le 0
préfixe à la place. C'est super parce que
0
est le même 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. Étant donné que les octales étaient encore nécessaires pour d'autres machines, a 0x
été choisi arbitrairement ( 00
a probablement été exclu comme maladroit).
C # est un descendant de C, il hérite donc de la syntaxe.
0x
plus 00
été préférence / maladresses. 00
casserait le code existant. 0010
comme l'octal est 8
, alors 0010
que l'hexidécimal serait 16
. Ils ne pouvaient pas utiliser n'importe quel nombre comme indicateur de deuxième chiffre (sauf 8
ou 9
, et ni l'un ni l'autre n'a de signification liée à l'hexidécimal), donc une lettre est un must. Et cela laisse soit 0h
ou 0x
( H e X idecimal). De ce point, il semble que ce soit vraiment de retour à la préférence.
0
préfixe pour octal a causé de très nombreux problèmes au fil des ans. Notamment dans des pays comme le Royaume-Uni où les numéros de téléphone commencent par un 0
. Javascript et de nombreuses autres langues les analyseraient comme octaux, gommant le nombre avant de le stocker. Pour ajouter au plaisir, un produit de base de données populaire reviendrait silencieusement à l'analyse décimale si le nombre contenait un 8
ou 9
.
Remarque: 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 terminer par 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 diriger 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 de tête pour indiquer hexadécimal. Il n'est pas ambigu car il commence toujours par un caractère numérique et ne peut donc pas être un identifiant valide, et est probablement basé sur la convention octale d'un 0 de tête.
0xFF00 // definitely not an identifier!
0xFFAB1234
doit être écrit comme 0FFAB1234h
. Je m'en souviens depuis asm en ligne dans Pascal quand j'étais jeune stackoverflow.com/q/11733731/995714
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 indiquer au 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 0x . Habituellement, nous pouvons comprendre par (6400) 16 ou (6400) 8 ou autre chose.
Pour le binaire, ce serait:
0b00000001
J'espère que j'ai aidé d'une manière ou d'une autre.
Bonne journée!
x6400
? Le x
pourrait encore être utilisé pour déduire l'hexadécimal.
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» sonne comme hex.
Juste mon opinion, mais je pense que cela a du sens.
Bonne journée!