L'hexadécimal ( ou hex ) est un système de numération positionnel permettant de représenter une valeur numérique en base 16. Selon la convention la plus courante, un chiffre est...
Worldlex WikiFrancaisLecture gratuite
L'hexadécimal ( ou hex ) est un système de numération positionnel permettant de représenter une valeur numérique en base 16. Selon la convention la plus courante, un chiffre est représenté par un chiffre de « 0 » à « 9 », comme en décimal , et par une lettre de l'alphabet de « A » à « F » (majuscule ou minuscule) pour les chiffres de valeur décimale de 10 à 15.
En règle générale, une convention de représentation hexadécimale autorise les lettres minuscules ou majuscules et traite la lettre de la même manière quelle que soit sa casse.
Lors de l'affichage de données non textuelles, une valeur stockée en mémoire est souvent représentée par une séquence de chiffres hexadécimaux séparés par des espaces. Par exemple, dans l' exemple de rendu hexadécimal suivant, chaque octet de 8 bits correspond à un nombre hexadécimal à deux chiffres, séparés par des espaces, tandis que le décalage de 32 bits au début correspond à un nombre hexadécimal à 8 chiffres.
Il existe plusieurs conventions pour exprimer qu'un nombre est représenté en hexadécimal.
Un indice décimal permet d'indiquer explicitement la base. Par exemple, 159 10 indique 159 en décimal, 159 16 indique 159 en hexadécimal. Certains préfèrent un indice textuel, comme 159 décimal et 159 hexadécimal , ou 159 d et 159 h
#xcode;TT
ou h : ou . Certaines implémentations exigent un zéro non significatif lorsque le premier caractère hexadécimal n'est pas un chiffre décimal, on écrirait donc au lieu de . D'autres implémentations (comme NASM) autorisent les nombres au format C ( ).FFh05A3H0FFhFFh0x42
ALGOL 68 utilise le préfixe 16rpour désigner les nombres hexadécimaux : 16r5a3, 16rC1F27ED. Les nombres binaires, quaternaires (base 4) et octaux peuvent être spécifiés de manière similaire.
Le format hexadécimal le plus courant sur les mainframes IBM ( série z ) et les ordinateurs de milieu de gamme ( IBM i ) exécutant les systèmes d'exploitation traditionnels ( zOS , zVSE , zVM , TPF , IBM i ) est ` X'5A3'x10 ...X'C1F27ED'
Dans certains contextes, un nombre est toujours écrit en hexadécimal et, par conséquent, n'a pas besoin de notation d'identification.
Dans la norme Unicode , une valeur de caractère est représentée par point d'exclamation inversé (¡).
Les références de couleur en HTML, CSS et X Window peuvent être exprimées avec six chiffres hexadécimaux (deux pour chaque composante rouge, verte et bleue, dans cet ordre) préfixés par magenta , par exemple, est représenté par un orange doré .
Dans l'encodage MIME (extensions de messagerie électronique) avec guillemets imprimables , les codes de caractères sont écrits sous forme de paires hexadécimales préfixées par ñ dans le jeu de caractères ISO/IEC 8859-1). )
Les données binaires PostScript (telles que les pixels d'une image ) peuvent être exprimées sous forme de paires hexadécimales consécutives sans préfixe :
...
Toute adresse IPv6 peut s'écrire sous la forme de huit groupes de quatre chiffres hexadécimaux (parfois appelés hextets ), chaque groupe étant séparé par un deux-points ( Les adresses IPv4 sont généralement écrites en décimal).
Les identifiants uniques globaux sont écrits sous la forme de trente-deux chiffres hexadécimaux, souvent regroupés par des tirets de taille inégale, par exemple
Symboles alternatifs
Proposition de notation hexadécimale de Bruce Alan Martin Proposition de notation hexadécimale de Ronald O. Whitaker.
Parmi les autres représentations hexadécimales notables utilisant des symboles autres que les lettres « A » à « F » pour représenter les chiffres supérieurs à 9, on peut citer :
Dans les années 1950, certaines installations, comme Bendix-14, privilégiaient l'utilisation des chiffres 0 à 5 avec une ligne supérieure pour désigner les valeurs , , et 100 (1967) utilisait les lettres majuscules B , C , D , E , F et G pour les valeurs de 10 à 15.
Le Monrobot XI (1960) utilisait les lettres S , T , U , V , W et X pour les valeurs de 10 à 15.
L' ordinateur paramétrique NEC NEAC 1103 (1960) utilisait les lettres D , G , H , J , K (et éventuellement V ) pour les valeurs 10 à 15.
Le Pacific Data Systems 1020 (1964) utilisait les lettres L , C , A , S , M et D pour les valeurs de 10 à 15.
Bruce Alan Martin, du Laboratoire national de Brookhaven, considérait le choix de A à F comme « ridicule ». Dans une lettre à l’éditeur du CACM de 1968 , il proposa un tout nouvel ensemble de symboles basé sur l’emplacement des bits.
En 1972, Ronald O. Whitaker de Rowco Engineering Co. a proposé une police triangulaire permettant une « lecture binaire directe » afin de « permettre à la fois l'entrée et la sortie des ordinateurs sans tenir compte des matrices d'encodage ».
Certaines puces de décodage d'affichage à sept segments (par exemple, 74LS47) affichent une sortie inattendue en raison d'une logique conçue uniquement pour produire correctement les chiffres de 0 à 9.
Le système hexadécimal peut exprimer les nombres négatifs de la même manière qu'en décimal, en plaçant un signe moins (−) devant le nombre pour indiquer qu'il est négatif.
Motif binaire
L'hexadécimal permet d'exprimer la séquence de bits dans un processeur ; ainsi, une séquence de chiffres hexadécimaux peut représenter une valeur signée ou même une valeur à virgule flottante . De cette façon, le nombre négatif −42 10 peut être écrit FFFF FFD6 dans un registre CPU 32 bits (en complément à deux ), C228 0000 dans un registre FPU 32 bits ou C045 0000 0000 0000 dans un registre FPU 64 bits (selon la norme IEEE pour les nombres à virgule flottante ).
Notation exponentielle
Tout comme les nombres décimaux peuvent être représentés sous forme exponentielle , les nombres hexadécimaux le peuvent également. La notation P utilise la lettre P (ou p , pour « puissance »), tandis que E (ou e ) remplit une fonction similaire en notation décimale E. Le nombre qui suit le P est décimal et représente l' exposant binaire . Augmenter l'exposant de 1 multiplie par 2, et non par 16 : 20p0 = 10p1 = 8p2 = 4p3 = 2p4 = 1p5 . Généralement, le nombre est normalisé de sorte que les chiffres hexadécimaux commencent par 1 (zéro est généralement représenté par 0 sans P ).
La plupart des langues européennes ne possèdent pas de mots non décimaux pour certains des chiffres de onze à quinze. Certains lisent les nombres hexadécimaux chiffre par chiffre, comme un numéro de téléphone, ou utilisent l' alphabet phonétique OTAN , l' alphabet phonétique conjoint armée/marine , ou un système similaire . Suite à l'adoption de l'hexadécimal par les programmeurs IBM System/360 , Magnuson (1968) a proposé un guide de prononciation attribuant des noms courts aux lettres hexadécimales : par exemple, « A » se prononçait « ann », « B » « bet », « C » « chris », etc. Un autre système de dénomination a été publié en ligne par Rogers (2007) ; il vise à rendre la représentation verbale identifiable dans tous les cas, même lorsque le nombre ne contient pas les chiffres A à F. Des exemples sont présentés dans les tableaux ci-dessous. Un autre système encore a été élaboré par Babb (2015), inspiré d'une plaisanterie de la Silicon Valley .
D'autres ont proposé d'utiliser les conventions du code Morse verbal pour exprimer des chiffres hexadécimaux de quatre bits, avec « dit » et « dah » représentant respectivement zéro et un, de sorte que « 0000 » est prononcé « dit-dit-dit-dit » (....), « dah-dit-dit-dah » (-..-) prononce le chiffre ayant une valeur de neuf, et « dah-dah-dah-dah » (----) prononce le chiffre hexadécimal pour 15.
Des systèmes de comptage sur les chiffres ont été conçus pour le binaire et l'hexadécimal. Arthur C. Clarke a suggéré d'utiliser chaque doigt comme un bit marche/arrêt, permettant ainsi de compter de zéro à 1023 × 10⁶ sur dix doigts. Un autre système permettant de compter jusqu'à FF¹⁶ ( 255 × 10⁶ ) est illustré à droite.
Conversion
Conversion binaire
La calculatrice programmable RPN HP-16C Computer Scientist de 1982 était conçue pour les programmeurs. L'une de ses principales caractéristiques était la conversion entre différents systèmes de numération (voir le nombre hexadécimal affiché).
La plupart des ordinateurs manipulent des données binaires, mais il est difficile pour un humain de travailler avec un grand nombre de chiffres, même pour un nombre binaire relativement petit. Bien que la plupart des gens connaissent le système décimal (base 10), il est beaucoup plus facile de convertir du binaire en hexadécimal qu'en décimal, car chaque chiffre hexadécimal correspond à un nombre entier de bits (4¹⁰ ) . Cet exemple convertit 1111² en base dix. Puisque chaque position dans un nombre binaire peut contenir soit un 1, soit un 0, sa valeur peut être facilement déterminée par sa position à partir de la droite :
0001 2 = 1 10
0010 2 = 2 10
0100 2 = 4 10
1000² = 8¹⁰
Donc:
Avec un peu de pratique, la conversion de 1111 2 en F 16 en une seule étape devient facile. L'avantage d'utiliser l'hexadécimal plutôt que le décimal augmente rapidement avec la taille du nombre. Lorsque le nombre devient grand, la conversion en décimal est très fastidieuse. En revanche, lors de la conversion en hexadécimal, il est trivial de considérer la chaîne binaire comme un ensemble de quatre chiffres et d'associer chaque groupe à un chiffre hexadécimal.
Cet exemple illustre la conversion d'un nombre binaire en décimal, en associant chaque chiffre à sa valeur décimale et en additionnant les résultats.
Comparez cela à la conversion en hexadécimal, où chaque groupe de quatre chiffres peut être considéré indépendamment et converti directement :
La conversion de l'hexadécimal au binaire est tout aussi directe.
Autres conversions simples
Bien que le système quaternaire (base 4) soit peu utilisé, il peut être facilement converti en hexadécimal ou en binaire et inversement. Chaque chiffre hexadécimal correspond à une paire de chiffres quaternaires, et chaque chiffre quaternaire correspond à une paire de chiffres binaires. Dans l'exemple ci-dessus, 2 5 C 16 = 02 11 30 4 .
Le système octal (base 8) se convertit également assez facilement, bien que ce ne soit pas aussi simple qu'avec les bases 2 et 4. Chaque chiffre octal correspond à trois chiffres binaires, et non à quatre. On peut donc convertir entre l'octal et l'hexadécimal en passant par une conversion intermédiaire en binaire, puis en regroupant les chiffres binaires par trois ou quatre.
Reste de division dans la base source
Comme pour toutes les bases, il existe un algorithme simple pour convertir la représentation d'un nombre en hexadécimal en effectuant des divisions entières et en calculant les restes dans la base source. En théorie, cela est possible à partir de n'importe quelle base, mais pour la plupart des humains, seule la base décimale et pour la plupart des ordinateurs, seul le binaire (qui peut être converti par des méthodes bien plus efficaces) se prêtent facilement à cette opération.
Soit d le nombre à représenter en hexadécimal, et la série h i h i−1 ...h 2 h 1 les chiffres hexadécimaux représentant le nombre.
je ← 1
h i ← d mod 16
d ← (d − h i ) / 16
Si d = 0 (retourner la série h i ) sinon incrémenter i et passer à l'étape 2
« 16 » peut être remplacé par toute autre base souhaitée.
Voici une implémentation JavaScript de l'algorithme ci-dessus permettant de convertir n'importe quel nombre en sa représentation hexadécimale sous forme de chaîne de caractères. Son but est d'illustrer cet algorithme. Toutefois, pour un traitement de données plus poussé, il est fortement conseillé d'utiliser les opérateurs bit à bit .
fonction toHex ( d ) { var r = d % 16 ; if ( d - r == 0 ) { return toChar ( r ); } return toHex (( d - r ) / 16 ) + toChar ( r ); }fonction toChar ( n ) { const alpha = "0123456789ABCDEF" ; retourner alpha . charAt ( n ); }
Il est également possible d'effectuer la conversion en attribuant à chaque position de la base source sa représentation hexadécimale
ce qui correspond à 45997 en base 10.
Outils de conversion
De nombreux systèmes informatiques proposent une fonction de calculatrice capable d'effectuer des conversions entre différentes bases, notamment l'hexadécimal.
Sous Microsoft Windows , la Calculatrice , en mode Programmeur, permet les conversions entre l'hexadécimal et d'autres bases de programmation courantes.
arithmétique élémentaire
Les opérations élémentaires telles que la division peuvent être effectuées indirectement par conversion vers un autre système numérique , tel que le système décimal couramment utilisé ou le système binaire où chaque chiffre hexadécimal correspond à quatre chiffres binaires.
On peut également effectuer des opérations élémentaires directement dans le système hexadécimal lui-même est une puissance de deux. Par exemple, 0,0625⁹ ( un seizième) est équivalent à 0,1⁹ , 0,09⁹ et 0,345⁶⁰ .
Nombres irrationnels
Le tableau ci-dessous donne le développement de quelques nombres irrationnels courants en décimal et en hexadécimal.
Pouvoirs
Les 16 premières puissances de 2 sont indiquées ci-dessous en hexadécimal pour illustrer leur relative simplicité par rapport à la représentation décimale.
Histoire culturelle
Les unités de mesure traditionnelles chinoises étaient en base 16. Par exemple, un jīn (斤) dans l'ancien système équivaut à seize taels . Le suanpan ( boulier chinois ) peut être utilisé pour effectuer des calculs hexadécimaux tels que des additions et des soustractions.
Comme pour le système duodécimal , des tentatives ponctuelles ont été faites pour promouvoir l'hexadécimal comme système de numération privilégié. Ces tentatives proposent souvent une prononciation et des symboles spécifiques pour chaque chiffre. Certaines propositions unifient les unités de mesure standard afin qu'elles soient des multiples de 16. Une des premières propositions de ce type a été avancée par John W. Nystrom dans son ouvrage intitulé « Project of a New System of Arithmetic, Weight, Measure and Coins: Proposed to be called the Tonal System, with Sixteen to the Base » , publié en 1862. Nystrom suggérait notamment un système horaire hexadécimal , qui subdivise la journée en 16, de sorte qu'il y a 16 « heures » (ou « 10 tims », prononcé « tontim ») dans une journée.
1020 (1964). La norme adoptée par IBM semble s'être largement répandue dès 1968, date à laquelle Bruce Alan Martin, dans sa lettre à l'éditeur du CACM, déplore que…
Le choix absurde des lettres A, B, C, D, E, F comme symboles numériques hexadécimaux ne fait qu'aggraver les difficultés déjà rencontrées pour distinguer les nombres octaux (ou hexadécimaux) des nombres décimaux (ou des noms de variables). Il est donc grand temps de revoir notre système de symboles numériques. Il aurait fallu le faire avant que ces mauvais choix ne deviennent la norme de facto !
L'argument de Martin était que l'utilisation des chiffres de 0 à 9 dans les nombres non décimaux « implique un système de numération décimale » : « Pourquoi ne pas utiliser des symboles (et des noms) entièrement nouveaux pour les sept ou quinze chiffres non nuls nécessaires en octal ou en hexadécimal ? Même l'utilisation des lettres de A à P constituerait une amélioration, mais des symboles entièrement nouveaux pourraient refléter la nature binaire du système. » Il a également soutenu que « la réutilisation des lettres alphabétiques pour les chiffres numériques représente un gigantesque retour en arrière par rapport à l’invention de glyphes distincts et non alphabétiques pour les chiffres il y a seize siècles » (comme les chiffres Brahmi , et plus tard dans un système de numération indo-arabe ), et que les normes ASCII récentes (ASA X3.4-1963 et USAS X3.4-1968) « auraient dû préserver six positions de table de code après les dix chiffres décimaux – plutôt que de les remplir inutilement de caractères de ponctuation » ( :;<=>???) qui auraient pu être placés ailleurs parmi les 128 positions disponibles.
Base16
Le Base16 est un système d'encodage binaire vers texte appartenant à la même famille que le Base32 , le Base58 et le Base64 . Les données sont divisées en séquences de 4 bits, et chaque valeur (de 0 à 15) est encodée par un caractère. Bien que n'importe quels 16 caractères puissent être utilisés, en pratique, on utilise les chiffres ASCII « 0 » à « 9 » et les lettres « A » à « F » (ou « a » à « f ») pour correspondre à la notation hexadécimale standard.
L'encodage Base16 est omniprésent en informatique moderne. Il constitue la base de la norme W3C pour l'encodage des pourcentages dans les URL , où un caractère est remplacé par le symbole de pourcentage « % » et sa forme encodée en Base16. La plupart des langages de programmation modernes prennent directement en charge la mise en forme et l'analyse des nombres encodés en Base16.
Les avantages du codage Base16 sont les suivants :
La plupart des langages de programmation disposent de fonctions permettant d'analyser l'hexadécimal encodé en ASCII.
Étant donné qu'il s'agit exactement d'un demi-octet, 4 bits sont plus faciles à traiter que les 5 ou 6 bits des notations Base32 et Base64, respectivement.
La notation est bien connue et facilement compréhensible sans avoir besoin d'une table de correspondance des symboles.
De nombreuses architectures de processeurs disposent d'instructions dédiées permettant d'accéder à un demi-octet (ou nibble), ce qui les rend plus efficaces au niveau matériel que les architectures Base32 et Base64.
Les inconvénients comprennent :
L'efficacité spatiale n'est que de 50 %, car chaque valeur de 4 bits des données originales est encodée sur un octet de 8 bits ; en revanche, les encodages Base32 et Base64 présentent des efficacités spatiales respectives de 63 % et 75 %.
Complexité liée à l'acceptation des lettres majuscules et minuscules