FlowingDev

Au-delà de la base 10 : Comment les ordinateurs comptent en hexa, binaire et octal

Apprenez comment les ordinateurs utilisent des bases numériques comme le binaire (base 2), l'hexadécimal (base 16) et l'octal pour tout représenter, des couleurs aux adresses réseau.

Essayer l'outil: Base Calculator

En une phrase

Une calculatrice de bases convertit des nombres entre différents systèmes de comptage, comme le familier système décimal (base 10) que nous utilisons tous les jours et le binaire (base 2) qui est au cœur de toute la logique numérique.

Le problème que ça résout

Les humains sont obsédés par le nombre dix. On a dix doigts et dix orteils, donc compter par groupes de dix (le système décimal, ou base 10) nous semble aussi naturel que de respirer. Mais les ordinateurs ? Eux, ils sont un peu plus simples. À la base, ils ne comprennent que deux choses : « on » et « off ». Un courant passe, ou il ne passe pas. Un transistor est activé, ou il ne l'est pas. C'est le monde du binaire, ou base 2. Chaque information dans un ordinateur — ce texte, votre vidéo de chat préférée, le système d'exploitation lui-même — n'est qu'une séquence incroyablement longue de uns et de zéros.

Ça crée un choc des cultures. Aux débuts de l'informatique, les programmeurs devaient se scotcher devant des murs massifs de code binaire pour débugger leurs programmes. Imaginez chercher une faute de frappe dans une chaîne d'un million de caractères composée de 10110010.... C'était exaspérant, propice aux erreurs, et une cause majeure de coups de tête de développeurs contre les murs.

Pour préserver leur santé mentale (et leurs fronts), ils ont développé des raccourcis. Ils ont réalisé qu'ils pouvaient regrouper les bits. En les regroupant par trois, ils ont obtenu l'octal (base 8), et en les regroupant par quatre, l'hexadécimal (base 16). Soudain, une longue séquence binaire comme 1011001011111110 pouvait s'écrire sous la forme hexa bien plus compacte B2FE.

La calculatrice de bases existe pour résoudre ce problème de traduction fondamental. C'est le diplomate universel entre le monde en base 10 de la pensée humaine et les mondes en bases 2, 8 et 16 qu'habitent nos serviteurs de silicium.

Comment ça marche sous le capot

La magie derrière la conversion entre les bases numériques n'a rien de magique : c'est juste un système de comptage appelé la notation positionnelle.

C'est quoi une « base », au juste ?

Dans n'importe quelle base, la position d'un chiffre détermine sa valeur. On tient ça pour acquis en base 10. Dans le nombre 345, on sait intuitivement que ça veut dire « trois centaines, quatre dizaines et cinq unités ».

Mathématiquement, ça donne : (3 * 10^2) + (4 * 10^1) + (5 * 10^0) = (3 * 100) + (4 * 10) + (5 * 1) = 300 + 40 + 5 = 345

La « base » est le nombre que vous élevez à une puissance pour chaque position (ici, 10). La même règle s'applique à n'importe quelle base.

En binaire (base 2), on n'a que deux chiffres : 0 et 1. Le nombre 1011 en binaire est : (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1) = 8 + 0 + 2 + 1 = 11 (en décimal)

L'hexadécimal (base 16) est un peu plus spécial car il nous faut 16 « chiffres » uniques. On utilise 0-9 pour les dix premiers, puis on emprunte les lettres A à F pour les valeurs de 10 à 15.

Décimal Hexa Binaire
0 0 0000
1 1 0001
... ... ...
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

Convertir du décimal vers n'importe quelle base

Pour faire le chemin inverse — de notre familier décimal à une autre base — on utilise la division successive. Convertissons 187 (décimal) en hexadécimal (base 16).

  1. Divisez 187 par 16 : 187 / 16 = 11 avec un reste de 11. En hexa, 11 c'est B.
  2. Divisez le résultat (11) par 16 : 11 / 16 = 0 avec un reste de 11. En hexa, 11 c'est B.
  3. Lisez les restes de bas en haut : BB.

Donc, 187 en décimal vaut BB en hexadécimal.

La relation spéciale : Binaire, Octal et Hexa

Voici le raccourci génial que les premiers programmeurs ont découvert. Comme 8 = 2^3 et 16 = 2^4, on peut convertir du binaire vers l'octal ou l'hexa sans passer par le décimal. Il suffit de regrouper les bits !

Prenons le nombre binaire 110101110100.

  • Pour convertir en Hexa (base 16) : Regroupez les bits par quatre, en partant de la droite. 1101 0111 0100 Ensuite, convertissez chaque groupe : 1101 = D (13) 0111 = 7 0100 = 4 Résultat : D74 en hexa.

  • Pour convertir en Octal (base 8) : Regroupez les bits par trois, en partant de la droite. 110 101 110 100 Ensuite, convertissez chaque groupe : 110 = 6 101 = 5 110 = 6 100 = 4 Résultat : 6564 en octal.

C'est pourquoi l'hexa et l'octal sont si populaires. Ce sont des représentations compactes et lisibles par l'homme des données binaires brutes.

Opérations bit à bit

Une calculatrice de développeur va au-delà de la simple conversion de base. Elle effectue aussi des opérations bit à bit, qui manipulent les uns et les zéros individuels de la représentation binaire d'un nombre.

  • ET (&) : Renvoie un 1 à chaque position de bit pour laquelle les bits correspondants des deux opérandes sont des 1. C'est super pour appliquer un « masque » ou vérifier si un bit spécifique est activé. 1101 & 1011 = 1001
  • OU (|) : Renvoie un 1 à chaque position de bit pour laquelle les bits correspondants de l'un ou des deux opérandes sont des 1. Utile pour « activer » un bit. 1101 | 1011 = 1111
  • OU exclusif (^ ou XOR) : Renvoie un 1 à chaque position de bit pour laquelle les bits correspondants sont différents. C'est un moyen pratique de basculer des bits. 1101 ^ 1011 = 0110
  • NON (~) : Inverse tous les bits. ~1101 = 0010 (en supposant des nombres sur 4 bits)
  • Décalages de bits (<<, >>) : Décalent tous les bits vers la gauche ou la droite. Un décalage à gauche (<< 1) est un moyen rapide de multiplier par 2 ; un décalage à droite (>> 1) est un moyen rapide de diviser par 2.

Histoires vécues

Le Cas du Type de Fichier Mystérieux

Une développeuse reçoit un e-mail avec une pièce jointe nommée data.bin. C'est censé être une image, mais son ordinateur n'a aucune idée de comment l'ouvrir. Au lieu de baisser les bras, elle ouvre le fichier dans un éditeur hexadécimal. Les tout premiers octets sont 89 50 4E 47 0D 0A 1A 0A. Elle a déjà vu ce genre de charabia. Elle balance les quatre premiers octets, 89504E47, dans un moteur de recherche. Les résultats sont immédiats : c'est le « nombre magique », ou signature de fichier, pour une image PNG. Elle renomme le fichier en data.png, et voilà, le fichier s'ouvre pour révéler la photo magnifique d'un shiba inu portant un chapeau.

La leçon : L'hexadécimal est le langage des données brutes. Le comprendre vous permet d'identifier et de débugger des fichiers à leur niveau le plus fondamental.

Le Casse-tête des Couleurs CSS

Une développeuse front-end s'arrache les cheveux. Elle a spécifié un beau rouge vif dans son CSS : color: #FF0000;. Mais à l'écran, la couleur est un rouge légèrement plus terne. Elle utilise les outils de développement du navigateur pour inspecter l'élément et découvre que la couleur calculée est en fait #FE0000. À l'aide d'une calculatrice de base, elle confirme que FF correspond à 255 en décimal (la valeur maximale pour un canal de couleur), tandis que FE est 254. La différence est minuscule, mais elle est là. Elle retrace la valeur de la couleur dans son code JavaScript et trouve une fonction qui convertissait un nombre à virgule flottante en entier en utilisant Math.floor() au lieu de Math.round(). Une valeur comme 254.99 devenait 254 (FE) au lieu de 255 (FF). Une petite correction plus tard, et son rouge est parfaitement éclatant.

La leçon : L'hexa est la lingua franca des couleurs sur le web. Être capable de convertir et de raisonner rapidement sur des valeurs hexa est crucial pour un design au pixel près et pour le débuggage.

Définir les Permissions sur un Serveur Linux

Un sysadmin junior doit sécuriser un fichier de configuration sur un serveur. Le sysadmin senior lui dit : « Mets les permissions à rwx r-x --- ». Le junior sait que cela correspond aux permissions du propriétaire, du groupe et des autres, mais il a oublié la commande. Il se souvient que les permissions Linux peuvent être représentées en octal. Il décompose le problème :

  • Propriétaire : rwx (lecture, écriture, exécution) = 4 + 2 + 1 = 7
  • Groupe : r-x (lecture, exécution) = 4 + 0 + 1 = 5
  • Autres : --- (aucune permission) = 0 + 0 + 0 = 0

Il combine ces chiffres pour obtenir le nombre octal 750. Il tape avec assurance chmod 750 config.yml et reçoit un signe de tête approbateur de son supérieur.

La leçon : L'octal fournit un moyen concis et standard de représenter des masques de bits, qui sont courants dans les systèmes de bas niveau comme les permissions de fichiers Unix.

Erreurs et pièges courants

  • Oublier le préfixe : Le nombre 10 signifie quelque chose de très différent en décimal, binaire et hexadécimal. Le code et la documentation utilisent des préfixes comme 0x pour l'hexa (0x10 = 16), 0b pour le binaire (0b10 = 2), et 0o pour l'octal (0o10 = 8) pour éviter toute ambiguïté. Soyez toujours attentif au contexte.
  • Confondre les caractères similaires : Quand on est fatigué et qu'on fixe un dump mémoire, il est facile de confondre B et 8, ou D et 0. Vérifiez deux fois vos transcriptions hexadécimales.
  • Ignorer le signe (Complément à deux) : Un nombre de 16 bits représenté par 0xFFFF en hexa pourrait signifier 65535 s'il s'agit d'un entier non signé. Mais s'il s'agit d'un entier signé utilisant le système courant du « complément à deux », il représente -1. La signification des bits dépend entièrement de la manière dont ils sont interprétés.
  • Les malheurs de l'Endianness : Quand un nombre multi-octets comme 0x1A2B3C4D est stocké en mémoire, l'ordre des octets peut différer. Les systèmes « Big-endian » le stockent comme 1A 2B 3C 4D. Les systèmes « Little-endian » (comme la plupart des PC modernes) le stockent comme 4D 3C 2B 1A. C'est une source classique de bugs en réseau et en parsing de fichiers lorsque deux systèmes avec un endianness différent tentent de communiquer.

Pourquoi ça doit être sur votre radar

Vous devriez penser dans différentes bases numériques chaque fois que vous regardez sous le capot des abstractions de haut niveau. Cela inclut :

  • Analyser des paquets réseau (ex: adresses MAC, adresses IPv6).
  • Travailler avec des formats de fichiers ou des dumps de mémoire brute.
  • Manipuler des sorties de hash (ex: SHA-256) qui sont presque toujours affichées en hexa.
  • Ajuster finement les couleurs web ou les graphiques bitmap.
  • Écrire du code où la performance est critique en utilisant des opérations bit à bit.
  • Configurer des paramètres système de bas niveau, comme les permissions ou les registres matériels.

Comprendre les bases est un super-pouvoir de développeur. Ça comble le fossé entre le code que vous écrivez et les impulsions électroniques qui lui donnent vie.

Pour aller plus loin

  • Positional notation sur Wikipédia — Le fondement mathématique de tous les systèmes de bases numériques. (en anglais)
  • Hexadecimal sur Wikipédia — Une exploration approfondie de la base 16, son histoire et ses usages courants. (en anglais)
  • Two's Complement sur Wikipédia — L'explication définitive sur la façon dont les ordinateurs représentent les nombres négatifs en binaire. (en anglais)
  • JavaScript Bitwise Operators sur MDN — Un guide pratique sur l'utilisation des opérations bit à bit dans un langage populaire.
  • List of file signatures sur Wikipédia — Une référence pratique pour identifier les fichiers par leurs « nombres magiques », souvent exprimés en hexa. (en anglais)
  • Endianness sur Wikipédia — Apprenez pourquoi l'ordre des octets est plus important que vous ne le pensez. (en anglais)

Théorie bouclée. Place à la pratique — 100 % dans ton navigateur.

Essayer l'outil: Base Calculator