Comment fonctionne l'hexadécimal : guide complet des nombres en base 16
Apprenez comment fonctionne l'hexadécimal (base 16), comment convertir l'hex en décimal et inversement, le rôle de l'hex en informatique, l'hex signé avec le complément à deux, l'arithmétique hex et des exemples en Python, JavaScript et C.
Comment fonctionne l'hexadécimal : guide complet des nombres en base 16
L'hexadécimal est partout en informatique. Si vous avez déjà vu un code couleur web comme #FF5733, une adresse mémoire comme 0x7FFF5FBFF8AC ou un hachage cryptographique, vous avez rencontré des nombres hexadécimaux. Pourtant, beaucoup de développeurs traitent l'hex comme une notation mystérieuse qu'ils copient-collent sans vraiment la comprendre.
Ce guide change cela. À la fin, vous comprendrez exactement comment fonctionne le système hexadécimal, saurez convertir entre hex et décimal dans les deux sens, et comprendrez pourquoi l'hex est la notation dominante en informatique bas niveau. Essayez notre convertisseur hexadécimal vers décimal gratuit pour suivre les exemples ci-dessous.
Pourquoi la base 16 ? Le lien avec les puissances de 2
Pour comprendre pourquoi l'hexadécimal existe, commencez par une question simple : pourquoi ne pas simplement utiliser le décimal pour tout en informatique ?
La réponse se trouve dans le binaire. Les ordinateurs fonctionnent en binaire (base 2), où les données sont représentées par des séquences de 0 et de 1. Un seul octet, l'unité fondamentale de la mémoire informatique, contient 8 chiffres binaires (bits). La valeur d'octet 11010110 est parfaitement précise pour un ordinateur, mais elle est longue, facile à mal lire et pénible pour les humains.
Le décimal (base 10) est naturel pour les humains, mais il ne s'aligne pas proprement avec le binaire. Convertir entre binaire et décimal exige des divisions et multiplications qui masquent les motifs de bits sous-jacents.
L'hexadécimal (base 16) résout ce problème parce que 16 est une puissance de 2 : 16 = 2^4. Cela signifie que chaque chiffre hex représente exactement 4 bits binaires. Deux chiffres hex représentent exactement un octet. L'alignement est parfait :
| Binaire (8 bits) | Hex (2 chiffres) | Décimal |
|---|---|---|
| 0000 0000 | 00 | 0 |
| 0111 1111 | 7F | 127 |
| 1000 0000 | 80 | 128 |
| 1111 1111 | FF | 255 |
L'octet 11010110 devient simplement D6 en hex, deux caractères qui correspondent directement aux bits sous-jacents sans arithmétique. C'est pourquoi l'hexadécimal est devenu la notation privilégiée en informatique.
Chiffres hexadécimaux : 0-9 et A-F
L'hexadécimal utilise seize symboles pour représenter les valeurs zéro à quinze :
| Chiffre hex | Valeur décimale | Binaire |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
Les lettres A à F dépassent les dix chiffres décimaux pour couvrir les valeurs 10-15. Les majuscules (A-F) comme les minuscules (a-f) sont acceptées dans presque tous les contextes, même si les majuscules sont le standard conventionnel.
Préfixes et notations hex courants
Différents langages et contextes utilisent différentes notations pour indiquer qu'un nombre est hexadécimal :
0x-- C, C++, Java, Python, JavaScript :0xFF#-- codes couleur CSS :#FF5733$-- assembleur 6502/68000 :$FF- suffixe
h-- assembleur Intel :FFh U+-- points de code Unicode :U+0041\x-- échappement hex dans les chaînes :\x41(la lettre A)
Le préfixe ou la notation ne change pas la valeur : il indique seulement au parseur ou au lecteur d'interpréter les chiffres comme de l'hexadécimal.
Comment convertir l'hexadécimal en décimal
La technique centrale est la notation positionnelle, le même principe qui régit tous les systèmes numériques, appliqué avec une base 16 au lieu de la base 10.
La formule
Pour un nombre hexadécimal avec les chiffres d(n-1), d(n-2), ..., d(1), d(0), la valeur décimale est :
decimal = d(n-1) x 16^(n-1) + d(n-2) x 16^(n-2) + ... + d(1) x 16^1 + d(0) x 16^0
Chaque chiffre hex est multiplié par 16 élevé à la puissance de sa position (en comptant depuis la droite à partir de 0), puis tous les produits sont additionnés.
Référence des puissances de 16
Mémoriser les premières puissances de 16 rend la conversion mentale beaucoup plus rapide :
| Puissance | Valeur |
|---|---|
| 16^0 | 1 |
| 16^1 | 16 |
| 16^2 | 256 |
| 16^3 | 4 096 |
| 16^4 | 65 536 |
| 16^5 | 1 048 576 |
| 16^6 | 16 777 216 |
| 16^7 | 268 435 456 |
| 16^8 | 4 294 967 296 |
Exemple 1 : convertir 2F en décimal
Entrée hex : 2F
- Le chiffre 2 est en position 1 : 2 x 16^1 = 2 x 16 = 32
- Le chiffre F (15) est en position 0 : 15 x 16^0 = 15 x 1 = 15
- Somme : 32 + 15 = 47
Résultat : 2F(hex) = 47(décimal)
Exemple 2 : convertir 1A3F en décimal
Entrée hex : 1A3F
- Chiffre 1 en position 3 : 1 x 16^3 = 1 x 4 096 = 4 096
- Chiffre A (10) en position 2 : 10 x 16^2 = 10 x 256 = 2 560
- Chiffre 3 en position 1 : 3 x 16^1 = 3 x 16 = 48
- Chiffre F (15) en position 0 : 15 x 16^0 = 15 x 1 = 15
- Somme : 4 096 + 2 560 + 48 + 15 = 6 719
Résultat : 1A3F(hex) = 6 719(décimal)
Exemple 3 : convertir DEADBEEF en décimal
Entrée hex : DEADBEEF (une célèbre valeur "hexspeak" utilisée comme nombre magique en débogage)
- D (13) x 16^7 = 13 x 268 435 456 = 3 489 660 928
- E (14) x 16^6 = 14 x 16 777 216 = 234 881 024
- A (10) x 16^5 = 10 x 1 048 576 = 10 485 760
- D (13) x 16^4 = 13 x 65 536 = 851 968
- B (11) x 16^3 = 11 x 4 096 = 45 056
- E (14) x 16^2 = 14 x 256 = 3 584
- E (14) x 16^1 = 14 x 16 = 224
- F (15) x 16^0 = 15 x 1 = 15
Somme : 3 489 660 928 + 234 881 024 + 10 485 760 + 851 968 + 45 056 + 3 584 + 224 + 15 = 3 735 928 559
C'est un entier non signé 32 bits couramment utilisé pour marquer la mémoire non initialisée dans les outils de débogage.
Comment convertir le décimal en hexadécimal
Le processus inverse utilise la division répétée par 16 :
- Divisez le nombre décimal par 16
- Notez le reste (il devient un chiffre hex)
- Remplacez le nombre par le quotient
- Répétez jusqu'à ce que le quotient soit 0
- Lisez les chiffres hex de bas en haut (dernier reste en premier)
Exemple : convertir 6 719 en hex
| Étape | Opération | Quotient | Reste | Chiffre hex |
|---|---|---|---|---|
| 1 | 6719 / 16 | 419 | 15 | F |
| 2 | 419 / 16 | 26 | 3 | 3 |
| 3 | 26 / 16 | 1 | 10 | A |
| 4 | 1 / 16 | 0 | 1 | 1 |
Lecture de bas en haut : 1A3F
Vérification : 1A3F(hex) = 1x4096 + 10x256 + 3x16 + 15x1 = 4096 + 2560 + 48 + 15 = 6 719. Correct.
L'hexadécimal en informatique
Adresses mémoire
Lorsque vous déboguez un programme, les adresses mémoire sont affichées en hexadécimal :
0x7FFF5FBFF8AC
0x00400000 (typical .text section start on Linux)
0xDEADBEEF (debug marker for uninitialized memory)
L'hex est utilisé parce que la mémoire est adressable par octets, et deux chiffres hex correspondent à un octet. Une adresse 64 bits comme 0x7FFF5FBFF8AC contient 12 chiffres hex, bien plus lisibles que les 48 bits binaires qu'elle représente.
Codes couleur web
Les couleurs hex CSS encodent les intensités rouge, verte et bleue :
| Code hex | R (décimal) | G (décimal) | B (décimal) | Couleur |
|---|---|---|---|---|
| #000000 | 0 | 0 | 0 | Noir |
| #FFFFFF | 255 | 255 | 255 | Blanc |
| #FF0000 | 255 | 0 | 0 | Rouge |
| #00FF00 | 0 | 255 | 0 | Vert |
| #0000FF | 0 | 0 | 255 | Bleu |
| #FF5733 | 255 | 87 | 51 | Rouge-orangé |
| #3A7BD5 | 58 | 123 | 213 | Bleu acier |
Chaque paire hex représente un octet (0-255 en décimal), et vous pouvez convertir ces valeurs avec notre convertisseur hexadécimal vers décimal. Pour une décomposition RGB complète, essayez notre convertisseur hex vers RGB.
Adresses MAC
Les adresses d'interfaces réseau utilisent six paires d'octets hex séparées par des deux-points ou des tirets :
00:1A:2B:3C:4D:5E
Les trois premiers octets (00:1A
) identifient le fabricant (OUI), et les trois derniers (3C:4D) sont l'identifiant propre à l'appareil. Chaque paire est un octet hex qui se convertit en valeur décimale 0-255.Points de code Unicode
Chaque caractère Unicode a un point de code écrit en hex :
| Point de code | Valeur hex | Décimal | Caractère |
|---|---|---|---|
| U+0041 | 41 | 65 | A |
| U+0048 | 48 | 72 | H |
| U+00E9 | E9 | 233 | e (avec accent) |
| U+4E16 | 4E16 | 19 990 | "monde" en chinois |
| U+1F600 | 1F600 | 128 512 | Emoji visage souriant |
La notation hex est utilisée parce qu'elle s'aligne avec l'encodage d'octets sous-jacent (UTF-8, UTF-16) et qu'elle est plus compacte que le décimal pour toute la plage Unicode (0 à 10FFFF).
Valeurs hex courantes que tout développeur devrait connaître
Certaines valeurs hex apparaissent si souvent en programmation et administration système que les reconnaître instantanément fait gagner beaucoup de temps.
Limites d'octets
| Hex | Décimal | Signification |
|---|---|---|
| 0x00 | 0 | Octet nul, terminateur de chaîne en C |
| 0x0A | 10 | Line feed (LF), nouvelle ligne Unix |
| 0x0D | 13 | Carriage return (CR) |
| 0x20 | 32 | Caractère espace ASCII |
| 0x7F | 127 | Entier signé 8 bits maximum, caractère DEL |
| 0x80 | 128 | Minimum signé 8 bits (complément à deux) |
| 0xFF | 255 | Maximum non signé 8 bits (1 octet) |
| 0xFFFF | 65 535 | Maximum non signé 16 bits |
| 0xFFFFFFFF | 4 294 967 295 | Maximum non signé 32 bits |
Plages de caractères ASCII en hex
| Plage hex | Plage décimale | Caractères |
|---|---|---|
| 30-39 | 48-57 | Chiffres '0' à '9' |
| 41-5A | 65-90 | Majuscules 'A' à 'Z' |
| 61-7A | 97-122 | Minuscules 'a' à 'z' |
Savoir que A majuscule commence à 0x41 (65) et a minuscule à 0x61 (97), avec une différence exacte de 0x20 (32), est utile pour implémenter la conversion de casse dans du code bas niveau.
Nombres de débogage et nombres magiques
Les programmeurs utilisent des motifs hex reconnaissables pour marquer des états mémoire spéciaux :
| Hex | Décimal | Usage |
|---|---|---|
| 0xDEADBEEF | 3 735 928 559 | Marqueur de mémoire non initialisée (IBM) |
| 0xCAFEBABE | 3 405 691 582 | Nombre magique des fichiers de classe Java |
| 0xBAADF00D | 3 131 961 357 | Tas Windows LocalAlloc non initialisé |
| 0xFEEDFACE | 4 277 009 102 | En-tête binaire Mach-O (macOS) |
| 0xDEADC0DE | 3 735 929 054 | Marqueur de tampon non initialisé OpenSolaris |
Ces valeurs "hexspeak" sont choisies parce qu'elles sont faciles à repérer dans les dumps mémoire tout en n'utilisant que des lettres valides en hex (A-F).
Hexadécimal signé et complément à deux
Dans la plupart des ordinateurs modernes, les entiers négatifs sont stockés avec l'encodage en complément à deux. Le comprendre est essentiel pour interpréter les valeurs hex signées dans les dumps mémoire, registres et protocoles réseau.
Fonctionnement du complément à deux
Pour un entier signé sur N bits :
- Si le bit le plus significatif (MSB) vaut 0, le nombre est positif (ou zéro)
- Si le MSB vaut 1, le nombre est négatif
Pour trouver la valeur négative d'un nombre hex dont le MSB est défini :
- Convertir en binaire
- Inverser tous les bits (0 devient 1, 1 devient 0)
- Ajouter 1
- Le résultat est la magnitude ; ajoutez un signe moins
Exemples hex signés sur 8 bits
| Hex | Binaire | Non signé | Signé (8 bits) |
|---|---|---|---|
| 00 | 00000000 | 0 | 0 |
| 7F | 01111111 | 127 | +127 (positif max) |
| 80 | 10000000 | 128 | -128 (négatif min) |
| FF | 11111111 | 255 | -1 |
| FE | 11111110 | 254 | -2 |
| 81 | 10000001 | 129 | -127 |
Exemple : que vaut 0x9C comme entier signé 8 bits ?
- Binaire : 10011100
- Le MSB vaut 1, donc le nombre est négatif
- Inverser : 01100011
- Ajouter 1 : 01100100 = 100 en décimal
- Résultat : -100
0x9C comme octet non signé vaut donc 156, mais comme octet signé il vaut -100. L'interprétation dépend entièrement du contexte.
Valeurs signées 16 bits et 32 bits
Le même principe s'étend aux entiers plus larges :
| Hex | Non signé | Signé (32 bits) |
|---|---|---|
| 00000000 | 0 | 0 |
| 7FFFFFFF | 2 147 483 647 | +2 147 483 647 (max) |
| 80000000 | 2 147 483 648 | -2 147 483 648 (min) |
| FFFFFFFF | 4 294 967 295 | -1 |
| FFFFFFFE | 4 294 967 294 | -2 |
Arithmétique hexadécimale
Même si la plupart des gens utilisent des calculatrices pour l'arithmétique hex, en comprendre les bases aide au débogage et au calcul mental.
Addition hexadécimale
L'addition hex fonctionne comme l'addition décimale, mais avec un seuil de retenue à 16 au lieu de 10 :
3A
+ 1F
----
- Colonne de droite : A(10) + F(15) = 25. Comme 25 >= 16, écrire 25 - 16 = 9 et retenir 1
- Colonne de gauche : 3 + 1 + 1(retenue) = 5
Résultat : 3A + 1F = 59
Vérification : 58 + 31 = 89 en décimal. 59(hex) = 5x16 + 9 = 89. Correct.
Soustraction hexadécimale
FF
- 3A
----
- Colonne de droite : F(15) - A(10) = 5
- Colonne de gauche : F(15) - 3 = C(12)
Résultat : FF - 3A = C5
Vérification : 255 - 58 = 197. C5(hex) = 12x16 + 5 = 197. Correct.
Astuces de calcul mental
- Ajouter 1 à F donne 10 (hex), pas 16 : souvenez-vous que vous êtes en base 16
- FF + 1 = 100 (hex) = 256 (décimal)
- Soustraire 1 à 10 (hex) donne F
- Doubler un chiffre hex : doublez la valeur décimale, puis reconvertissez si >= 16
Hexadécimal vers décimal dans les langages de programmation
Python
La fonction int() de Python est la façon standard de parser des chaînes hex :
# Hex string to decimal
result = int("FF", 16) # 255
result = int("1A3F", 16) # 6719
# Hex literal
value = 0xFF # 255
# Decimal to hex
hex(255) # '0xff'
format(255, 'X') # 'FF'
format(255, '04X') # '00FF' (zero-padded)
# Parse with 0x prefix
int("0xFF", 16) # 255
int("0xFF", 0) # 255 (auto-detect base)
JavaScript
JavaScript utilise parseInt() pour les chaînes hex et le préfixe 0x pour les littéraux :
// Hex string to decimal
parseInt("FF", 16) // 255
parseInt("1A3F", 16) // 6719
// Hex literal
const value = 0xFF; // 255
// Decimal to hex
(255).toString(16) // 'ff'
(255).toString(16).toUpperCase() // 'FF'
// For very large values, use BigInt
BigInt("0xDEADBEEFDEADBEEF") // 16045690984833335023n
// Number.parseInt also works
Number.parseInt("FF", 16) // 255
C / C++
C utilise strtol() pour la conversion de chaînes et prend directement en charge les littéraux hex :
#include <stdio.h>
#include <stdlib.h>
int main() {
// String to decimal
long value = strtol("FF", NULL, 16); // 255
printf("%ld\n", value);
// Hex literal
int x = 0xFF; // 255
printf("%d\n", x); // decimal: 255
printf("%X\n", x); // hex: FF
printf("%08X\n", x); // zero-padded: 000000FF
// Unsigned 32-bit
unsigned long big = strtoul("DEADBEEF", NULL, 16);
printf("%lu\n", big); // 3735928559
return 0;
}
Foire aux questions
Comment convertir l'hex en décimal ?
Multipliez chaque chiffre hex par sa puissance positionnelle de 16, puis additionnez tous les produits. Par exemple, hex 2F = 2x16 + 15x1 = 32 + 15 = 47. Remplacez les lettres A-F par leurs valeurs décimales (A=10, B=11, C=12, D=13, E=14, F=15) avant de multiplier.
Que vaut 0xFF en décimal ?
0xFF vaut 255 en décimal. F(15) x 16 + F(15) x 1 = 240 + 15 = 255. C'est la valeur maximale d'un octet non signé de 8 bits (binaire 11111111), souvent utilisée comme masque de bits en programmation.
Que signifie le préfixe 0x ?
Le préfixe 0x est une convention de notation utilisée en C, Java, Python, JavaScript et de nombreux autres langages pour indiquer que les chiffres suivants sont hexadécimaux. Il ne change pas la valeur : 0xFF et FF représentent le même nombre (255 en décimal).
Comment convertir le décimal en hex ?
Divisez répétitivement le nombre décimal par 16 en notant chaque reste. Les restes, lus de bas en haut, forment le nombre hex. Pour les restes 10-15, utilisez les lettres A-F. Par exemple, 255 / 16 = 15 reste 15, puis 15 / 16 = 0 reste 15. Lecture de bas en haut : FF.
Quelle est la différence entre hex et décimal ?
L'hexadécimal est en base 16 (chiffres 0-9 et A-F), tandis que le décimal est en base 10 (chiffres 0-9 seulement). L'hex est préféré en informatique parce que chaque chiffre hex correspond exactement à 4 bits binaires, ce qui donne une représentation compacte des données binaires. Le décimal est le système de comptage humain standard.
Comment convertir l'hex signé en décimal ?
Pour les valeurs hex signées (complément à deux), vérifiez le bit le plus significatif. S'il est défini (chiffre hex 8-F en position la plus à gauche pour les valeurs 8 bits), le nombre est négatif. Pour trouver la magnitude : inversez tous les bits et ajoutez 1. Par exemple, 0xFF comme entier signé 8 bits vaut -1 (inverser 11111111 en 00000000, ajouter 1 pour obtenir 1, puis appliquer le signe négatif).
Où utilise-t-on l'hexadécimal ?
L'hex est utilisé pour les adresses mémoire, les codes couleur web (#FF5733), les adresses MAC, les points de code Unicode (U+0041), les hachages cryptographiques (SHA-256), le langage assembleur, les adresses IPv6 et partout où des données binaires doivent être notées de façon compacte et lisible.
Pourquoi l'hex est-il meilleur que l'octal ?
L'hex s'aligne sur la frontière d'octet : 2 chiffres hex = 1 octet (8 bits). L'octal (base 8) utilise des groupes de 3 bits, qui ne s'alignent pas proprement avec les octets de 8 bits. Un octet nécessite 2,67 chiffres octaux mais exactement 2 chiffres hex. C'est pourquoi l'hex a largement remplacé l'octal en informatique moderne, même si l'octal subsiste dans les permissions de fichiers Unix (chmod 755).
Comment faire de l'arithmétique hex ?
L'arithmétique hex suit les mêmes règles que l'arithmétique décimale, avec un seuil de retenue/emprunt à 16 au lieu de 10. Pour l'addition, si la somme d'une colonne dépasse 15 (F), soustrayez 16 et retenez 1 dans la colonne suivante. Pour la soustraction, si la différence d'une colonne est négative, ajoutez 16 et empruntez 1 à la colonne suivante.
L'hexadécimal peut-il avoir des points décimaux ?
Oui, même si c'est rare. Hex 1.8 vaut 1 + 8/16 = 1,5 en décimal. Certains contextes de programmation (format %a de C99, notation hex flottante IEEE 754) utilisent des flottants hex comme 0x1.8p3 (signifiant 1,5 x 2^3 = 12,0). En pratique, la plupart des conversions hex-vers-décimal concernent des entiers.
Hex vs autres systèmes numériques
Comprendre comment l'hexadécimal se compare aux autres systèmes numériques clarifie quand utiliser chacun :
| Propriété | Binaire (Base 2) | Octal (Base 8) | Décimal (Base 10) | Hex (Base 16) |
|---|---|---|---|---|
| Chiffres utilisés | 0-1 | 0-7 | 0-9 | 0-9, A-F |
| Bits par chiffre | 1 | 3 | ~3.32 | 4 |
| Alignement octet | Parfait (8 chiffres) | Mauvais (2.67 chiffres) | Aucun (variable) | Parfait (2 chiffres) |
| Usage principal | Logique matérielle | Permissions Unix | Math humaines | Notation informatique |
L'hex gagne dans les contextes informatiques grâce à son alignement parfait sur les octets. L'octal survit dans les permissions Unix (chmod 755 = rwxr-xr-x), où le groupement de 3 bits correspond au modèle read/write/execute sur 3 bits. Le décimal reste le standard pour les valeurs destinées aux humains comme les prix, les quantités et les mesures.
Pour convertir entre ces systèmes, vous pouvez utiliser notre convertisseur binaire vers décimal ou notre convertisseur binaire vers octal en plus du convertisseur hex vers décimal.
Résumé
L'hexadécimal est le pont entre une notation lisible par l'humain et la réalité binaire des ordinateurs. Sa puissance vient d'un fait mathématique simple : 16 = 2^4, ce qui signifie que chaque chiffre hex correspond exactement à 4 bits binaires. Cet alignement fait de l'hex la manière naturelle d'exprimer les données binaires de façon compacte.
Points clés de ce guide :
- Hex vers décimal : multipliez chaque chiffre par sa puissance de 16 et additionnez les produits
- Décimal vers hex : divisez répétitivement par 16 en collectant les restes de bas en haut
- Deux chiffres hex = un octet : FF = 255, la valeur maximale d'un octet non signé
- L'hex signé utilise le complément à deux : les mêmes 8 bits peuvent signifier 255 (non signé) ou -1 (signé)
- L'arithmétique hex suit les règles standard avec un seuil de retenue à 16
- Programmation : Python
int("FF", 16), JavaScriptparseInt("FF", 16), Cstrtol("FF", NULL, 16)
Prêt à convertir ? Utilisez notre convertisseur hexadécimal vers décimal gratuit pour convertir instantanément n'importe quelle valeur hexadécimale en décimal, avec une décomposition étape par étape en notation positionnelle. Vous pouvez aussi explorer notre convertisseur hexadécimal vers binaire et notre convertisseur hexadécimal vers texte pour les conversions associées.