i
Le système binaire est le système numérique utilisé par les ordinateurs pour stocker l’information ou calculer.

Pourtant, c’est avant tout un moyen de compter, de dénombrer.

Habituellement, nous comptons en base 10 : le décimal. Cela vient probablement du fait que nous avons dix doigts et qu’on a commencé à compter tout simplement sur nos doigts, à la fois en tant qu’individu (quand on était enfant), et en tant qu’espèce (dont l’évolution des capacités cognitives nous a poussé à dénombrer les choses de la vie et ça a commencé par ou à l’aide de nos doigts).

Mathématiquement, le dénombrement en base 10 est juste un système parmi d’autres. On pourrait aussi dénombrer en base 2, 8, 15, 324 ou en n’importe quelle base.

Certaines choses de la vie courante sont ainsi dénombrées dans d’autres bases : base 60 ou sexagésimal pour les minutes ou les secondes, ou base 26 (celle de l’alphabet) pour les plaques minéralogiques, base 13 pour les jeux de carte (les dix chiffres, valet, dame, roi), etc.

Pour l’informatique, la base deux — ou binaire — est idéale, car elle est totalement adaptée à la transmission d’information par le biais de signaux électriques ou optique : les deux états en binaire, 0 et 1, traduisent alors simplement l’absence et la présence d’un signal, sans autre état possible entre ces deux-là.

Même si le binaire est adapté à la machine, on peut, si l’on veut, apprendre à compte en binaire nous aussi : une fois qu’on a saisi l’astuce, cela devient naturel et l’on peut s’amuser entre initiés.
Pour les plus férus, il sera même possible de compter en base ternaire, ou dans la base de votre choix. L’intérêt en sera probablement limité, mais c’est amusant.

Dans cet article je vais me restreindre au binaire et pour le comprendre, on va commencer par décortiquer le fonctionnement du système décimal que l’on utilise tous les jours.

Fonctionnement du système décimal

Notre système décimal utilise les chiffres d’origine arabes (elles-mêmes dérivées des systèmes de comptages orientales, indoeurasiennes)

Le fonctionnement de ce système repose sur trois principes (c’est moi qui le dit) que l’on va voir tout de suite.

Seulement dix chiffres

Première chose, a priori évidente : le système décimal utilise dix caractères — les 10 chiffres — représentant chacun une quantité : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Jusque-là, rien de compliqué, mais ceci signifie que pour un grand nombre comme 2020 par exemple, il n’y a pas de chiffre dédié. À la place, on utilise des chiffres représentant des quantités plus petites que l’on combine entre eux : 2-0-2-0. Dans ce cas, c’est la position du chiffre qui devient importante.

Tout ceci n’est pas le cas de tous les systèmes de comptage.

Les chiffres romains, par exemple, ont un graphène pour 1, 5, 10, 50, 100, 500 et 1 000 (respectivement I, V, X, L, C, D, M), qu’ils combinaient d’une façon précise pour dénombrer tous les autres nombres. Par exemple VIII (« 5+1+1+1 ») pour 8, ou IX (« 1 avant 10 ») pour 9. Constatons au passage que le système romain ne dispose pas de chiffre pour le zéro.

En japonais traditionnel, on utilise un système multiplicatif, par exemple 二十 (« 2 [×] 10 ») pour 20, et 三百二十七 (« 3 [×] 100 [+] 2 [×] 10 [+] 7 ») pour 327 : les rangs de dizaines, centaines, etc. sont donc mentionnés explicitement dans l’écrire numérique ; alors qu’en français, ils sont mentionnés à l’oral mais pas dans l’écriture numérique.

Un système positionnel

Le système décimal, utilise donc la position d’un chiffre dans un nombre pour lui donner une signification particulière : le même chiffre peut donc avoir une valeur différente.

Ainsi, un « 2 » situé en première position à partir de la droite signifie tout simplement « la quantité deux ». Le même « 2 » situé en seconde position signifie « la quantité vingt », ce qui n’est plus la même chose.

Un tel système est qualifié de « système positionnel ».

Un nombre comme 86 possède 8 en position deux et 6 en position un.

Maintenant compliquons légèrement les choses : pour commencer je vous conseille de ne pas parler de position 2 et 1, mais parlons de position 1 et 0.

La position 0 est celle des unités, la position 1 celle des dizaines, puis 2 pour les centaines, et ainsi de suite.

Si vous voulez vous en souvenir, retenez que 100 contient deux zéros, d’où la position 2 pour les centaines. Pour 1000, on a trois zéros, d’où la position 3 pour les milliers. Dans les unités il n’y a pas de zéro : c’est donc la position 0.

Dans un nombre, plus la position d’un chiffre est à gauche, plus son importance est élevé.

Cette hiérarchie — grandissante vers la gauche — tire son origine de l’écriture arabe dont nos chiffres sont issus. L’écriture arabe se fait bien-sûr de la droite vers la gauche, là où l’écriture occidentale se fait de gauche à droite.

À présent, comment compte-t-on ?

Lorsque l’on compte les nombres un par un, on incrémente le nombre : 1, 2, 3…, 7, 8, 9. Là, on arrive à 9 : on a atteint le maximum pour le chiffre des unités (la position 0).

Il faut donc passer aux dizaines. Pour cela, on va incrémenter les dizaines et passer les unités à 0 : après 09, on a 10.
Ensuite on remplit de nouveau le chiffre des unités comme avant : 10, 11, 12, 13…

Si l’on atteint 19, on refait la même chose : on incrémente à nouveau les dizaines et l’on remet les unités à 0. Après 19, il y a 20 et ainsi de suite.
Lorsque l’on a totalement rempli les dizaines, on passe au rang des centaines et l’on remet à 0 les dizaines et les unités : après 99 il y a 100.

C’est un peu comme les compteurs kilométriques sur les anciennes voitures : l’on s’amusait à voir les chiffres tourner tous en même temps quand on passait de 199999 à 200000 :

Un odomètre classique.
Ici, les chiffres sont sur des cylindres et quand celui de droite atteint 9, il entraine celui à sa gauche tout en revenant à 0. C’est le principe décrit ici pour le système de comptage décimal (source image)

Je pense que vous avez compris, mais il faut bien maîtriser cette notion de position des chiffres, la façon dont on les incrémente et les remet à zéro. Car si vous l’avez compris en base 10, alors vous le comprendrez en base 2.

Positions et puissances de la base

La troisième notion que je veux aborder pour décrire la base décimale, c’est celle où l’on décompose les nombres en puissances de la base.

Pas de panique : il s’agit juste une phrase compliquée pour dire « décomposer en unités, dizaines et centaines ».

Par exemple, si l’on décompose 137, cela me donne :

  • 1 centaine = 1 × 100
  • 3 dizaines = 3 × 10
  • 7 unités = 7 × 1

Plus mathématiquement, on peut remarquer :

  • 1 centaine = 1 × 102
  • 3 dizaines = 3 × 101
  • 7 unités = 7 × 100

La base, ici, c’est 10. Les puissances de la base sont 100, 101, 102. Décomposer un nombre en puissances de la base revient à faire ça :

137 = 1 × 102 + 3 × 101 + 7 × 100
Pas trop compliqué ?

Inversement maintenant, si l’on a un nombre en base 10 avec 2 en position 3 et 1 en position 1, ça signifie que notre nombre est 2 × 103 + 1 × 101, soit 2 010.

Vous constatez ici l’intérêt d’avoir insisté sur le fait de noter 0 pour les unités : en effet, en position n correspond la puissance n de la base, et les puissances commencent effectivement à 0 : ainsi, le nombre 4 en décimal est égal à 4 × 100, et 300 vaut 3 × 102.

En conclusion de cette partie sur la base 10, disons que toute cette logique est le fondement de notre façon de compter, de dénombrer, et cela fonctionne en base 10, en base 2 ou n’importe quelle base.

Transposition de cette logique sur une base 2

Le fonctionnement entre binaire et décimal est le même. Voyez vous-même :

  • En décimal, base dix, nous avions dix chiffres (0, 1, 2, 3, 4, 5, 6, 7, 8 et 9), nous changions de rang arrivé au dernier chiffre, 9, et l’on décomposait les nombres en puissances de 10, la base.
  • En binaire, base deux, nous avons deux chiffres (0 et 1), nous changeons de rang arrivé au dernier chiffre, 1, et l’on décompose les nombres en puissances de 2, la base.

Il n’y a pas besoin de savoir autre chose : la méthode est bête est méchante.

Voyons comment appliquer tout ça, par l’exemple.

Pour mémo, les puissances de 10 sont :

  • 100 = 1
  • 101 = 10
  • 102 = 100
  • 103 = 1 000
  • 104 = 10 000
  • 105 = 100 000
  • 106 = 1 000 000
  • 107 = 10 000 000

Et les puissances de 2 sont :

  • 20 = 1
  • 21 = 2
  • 22 = 4
  • 23 = 8
  • 24 = 16
  • 25 = 32
  • 26 = 64
  • 27 = 128

Compter en binaire

Pour compter en binaire, comme en décimal, on commence à 0. Ensuite on ajoute 1, ce qui donne 1.

Si l’on continue de compter, on va rajouter 1. Or, il est dit juste au-dessus que « nous changeons de rang arrivé au dernier chiffre, 1 ». Comme on est déjà à 1, on passe donc à 1 la position suivante en remettant les précédents à zéro : ça fait « 10 » (lire « un-zéro »).
Puis on continue de compter : on obtient 11 (lire « un-un »).

On poursuit : les deux premières positions sont pleines, on passe à la troisième et on remet les autres à zéro : ça donne 100 (lire « un-zéro-zéro »).
Puis on applique la même chose : après 100, il y a 101, puis 110, 111, 1000, 1001, 1010, 1011…

Dans un tableau :

valeur en décimal :équivalent en binaire :explications :
00logique !
11simple !
210La position 0 a atteint son maximum ! Qu’à cela ne tienne, on remet un zéro et on incrémente la position 1.
311On re-remplit le rang 0.
4100Les positions 0 et 1 sont pleines : on passe donc à la position 3 et on remet les précédents à 0.
5101On procède de même.
6110
7111
81000On entame le quatrième rang.
91001On recommence au premier…
101010On remplit chaque position.

Bien. Ceci nous permet de compter en binaire aussi loin que l’on souhaite. Voyons maintenant comment convertir un nombre en binaire directement, ce qui est pratique, surtout pour les grands nombres.

Convertir du décimal au binaire

Si l’on dispose d’un nombre en décimal que l’on souhaite avoir en binaire, il faut commencer par le décomposer en puissances de la base, donc en puissances de deux.

Prenons l’exemple du nombre 50. Sa décomposition en puissances de 2 (dont j’ai remis la liste un peu plus haut) est :

50 = 32+16+2

On écrit ensuite les puissances de 2 explicitement :

50 = 1 × 25 + 1 × 24 + 1 × 21
50 est composé des puissances 5, 4 et 1 de deux. Afin d’être complet, on va aussi ajouter les puissances 3, 2 et 0,manquantes, donc là zéro fois :

50 = 1 × 25 + 1 × 24 + 0 × 23 + 0 × 22 + 1 × 21 + 0 × 20

Maintenant, on a décomposé notre nombre 50 en toutes les puissances de 2 plus petites que 50 et dans l’ordre :

50 = 1 × 25 + 1 × 24 + 0 × 23 + 0 × 22 + 1 × 21 + 0 × 20
Si les différentes puissances sont toutes là, soit 1, soit 0 fois, alors on a fini : notre nombre en binaire correspond comme par magie aux coefficients devant les puissances :

50 = 1 × 25 + 1 × 24 + 0 × 23 + 0 × 22 + 1 × 21 + 0 × 20
50 en base dix, c’est 110010 en binaire.

Pour faciliter de lecture, tout comme on utilise un séparateur des milliers pour les grands nombres en base dix, on regroupe les chiffres en binaire par quatre. On écrit donc 11 0010.

Enfin, afin de bien savoir dans quelle base on s’exprime, surtout quand on passe d’une base à l’autre, on peut écrire :

50déc = 11 0010bin
Voilà !

Je résume la méthode :

  1. On a notre nombre en décimal ;
  2. On le décompose en valeurs de puissances de 2 ;
  3. Si certaines puissances manquent, on les rajoute en mettant 0 devant ;
  4. On lit les coefficients devant les puissances de 2, ce sera notre nombre en binaire ;
  5. Par commodité, d’écriture, on regroupe les chiffres par 4.

Je vous laisse vous exercer avec d’autres nombres. Essayez par exemple de convertir 10, 42, 31, votre âge, votre date de naissance… C’est amusant :D.

Simple remarque : la taille d’un nombre en binaire est importante. Ainsi, le nombre 2020déc s’écrit 111 1110 0100bin, soit sur onze rangs !
Cela vient évidemment du fait que la base binaire est plus petite que la base décimale, et qu’il faut donc davantage de rangs pour écrire un nombre.
Pour un ordinateur ce n’est pas un problème. Pour nous, ça devient vite pénible. Pour ça, nous utilisons souvent une autre base, l’hexadécimal (base 16), qui allège nettement l’écriture tout en restant beaucoup plus proche du binaire que ne l’est le décimal ; on le verra un petit peu plus bas.

Convertir du binaire au décimal

Si l’on peut convertir un nombre du système décimal vers le binaire, on peut également effectuer l’opération dans l’autre sens. Il s’agit alors de faire les étapes précédentes en ordre inverse, tout simplement.

Convertissons par exemple le nombre 101 1100bin en décimal.

On commence par écrire les puissances de deux :

101 1100bin = 1 × 26 + 0 × 25 + 1 × 24 + 1 × 23 + 1 × 22 + 0 × 21 + 0 × 20
Puis on les remplace par leur valeur :

101 1100bin = 1 × 64 + 0 × 32 + 1 × 16 + 1 × 8 + 1 × 4 + 0 × 2 + 0 × 1

On peut ignorer les rangs où le coefficient est 0 :

101 1100bin = 1 × 64 + 1 × 16 + 1 × 8 + 1 × 4

On simplifie l’écriture :

101 1100bin = 64 + 16 + 8 + 4

Ce qui donne finalement :

101 1100bin = 92déc
Il suffit ici de connaître ses puissances de deux : 1, 2, 4, 8, 16, 32, 64… et de savoir additionner des nombres.

Un mot sur l’hexadécimal

Un peu plus haut, j’ai mentionné l’hexadécimal, comme un moyen assez pratique pour alléger l’écriture des longues chaînes écrites en binaire. En effet, en hexadécimal, une position, un chiffre correspond à 4 chiffres en binaire.

Donc si votre nombre fait 16 chiffres de long en binaire, il n’en fera que 4 en hexadécimal, ce qui est tout de même nettement plus court à écrire pour nous ou à afficher sur un écran de taille limitée.

Comment ça marche ?

L’hexadécimal est un système en base 16. Ses seize « chiffres » sont donc 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Les derniers « chiffres » — qui sont en fait des lettres — correspondent aux valeurs de 10 à 15.
Pour le reste, c’est un système positionnel comme le décimal et le binaire. Tout ce que l’on vient de voir pour le décimal et le binaire reste donc applicable pour l’hexadécimal.

Ainsi :

valeur en décimal :équivalent en hexadécimal :
00
11
22
33
99
10A
11B
14E
15F
1610
1711
2519
261A
271B
1599F
160A0
161A1
254FE
255FF
256100

Je le répète : le principe est sensiblement le même. Que l’on soit en base 10, 2, 16 ou n’importe quoi d’autre, la méthode sera identique.

Maintenant, quel rapport avec le binaire ?

En fait, il faut remarquer qu’un nombre de 4 chiffres en binaire peut aller jusqu’à 15 (il s’agit de 1111bin), or en hexadécimal, un seul chiffre permet également d’aller jusqu’à 15 (il s’agit de Fhex).
Mathématiquement, c’est parce que 161 = 24.

Une conséquence pratique de ça est que pour chaque groupe de 4 chiffres en binaire, on aura un chiffre en hexadécimal.

Par exemple, le nombre binaire 1101 0000 1010 1001bin devient en hexadécimal : D0A9hex, tout simplement car :

  • 1101bin = Dhex (= 13déc)
  • 0000bin = 0hex (= 0déc)
  • 1010bin = Ahex (= 10déc)
  • 1001bin = 9hex (= 9déc)

La conversion entre le binaire et l’hexadécimal est alors très rapide, y compris de tête, car il suffit de connaître les nombres entre 0 et 15 dans les deux bases, de les remplacer d’une base à l’autre et le tour est joué.

Quant à la conversion de l’hexadécimal en décimal, on utilise les puissances de 16 :

D0A9hex = D × 163 + 0 × 162 + A × 161 + 9 × 160
D0A9hex = 13 × 163 + 0 × 162 + 10 × 161 + 9 × 160
D0A9hex = 13 × 4096 + 0 × 256 + 10 × 16 + 9 × 1

D0A9hex = 53 417déc

Dans l’ensemble, les conversions entre les bases sont faciles une fois qu’on a saisi l’astuce : il s’agit juste de décomposer en puissances de la base et d’additionner.

Conclusion

Le binaire peut sembler mystérieux si on ne sait pas ce que c’est. Il s’agit pourtant simplement d’un moyen de compter avec seulement deux chiffres (0 et 1) au lieu de dix comme on en a l’habitude.

La méthode pour compter ou calculer en binaire est la même que pour le décimal. On peut compter, comme on l’a vu, mais on peut aussi faire des additions, des multiplications, etc. Je ne ferais pas d’exemple ici, je vous réfère à ma page plus complète (dont cet article est fortement inspiré) et qui en parle.

Ici j’ai présenté le système binaire comme un moyen de compter. Pourtant, l’ordinateur affiche des chiffres, des lettres, des couleurs, des images, des vidéos… avec le binaire.
Ceci est simplement une question d’encodage : tout est stocké avec des 0 et des 1, mais avec le bon encodeur/décodeur, on peut afficher des lettres, des images, etc.

Par exemple, dans la table ASCII — qui permet de traduire les lettres de l’alphabet latin en binaire, le A majuscule est représenté par 1000001 ; le B majuscule par 1000010, le C par 1000011, etc.
Il s’agit d’une simple table de conversion. Si un document contient la suite « ABC », alors, quelque part en mémoire ou sur le disque dur se trouve la suite binaire 100000110000101000011.

La même chose est réalisée pour tous les programmes installés sur un ordinateur : le binaire est la base, après c’est l’ordi qui interprète ça de la manière adéquate.

Enfin, petite remarque : vous rencontrerez parfois des chiffres hexadécimaux exclusivement composé de deux chiffres, comme FF, AF, ou 9A… Si l’on transforme ça en binaire, on se retrouve avec des nombres binaires à 8 chiffres. Ces nombres binaires à 8 chiffres, on appelle ça des octets (octet, octo, 8) !

De l’importance de noter la base

Il peut être important de noter la base dans laquelle on travaille, car un nombre peut avoir des valeurs différentes en fonction de la base, y compris si les différents chiffres composant ce nombre sont les mêmes.

Par exemple :

  • 45déc = 45déc ;
  • 45hex 69déc ;
  • 45oct, c’est 37déc.

Si vous rédigez un document où vous employez des notations dans différentes bases, il faut les noter.

Pour information, c’est à cause de ça que vos disques de durs de 1 To ne sont affichés que 930 Go (et non pas 1 000 Go comme il devrait).
Car oui, on multiplie bien par 1 000 entre le kilo-, méga-, giga-, et non par 1 024 : que l’on parle de grammes, de mètres, de joules ou d’octets. Mais l’informatique étant ce qu’il est et vu qu’il travaille en binaire avant tout, certains ont arrondi le 103 (qui vaut 1 000) à 210 (qui vaut 1 024).

Ceci est aussi la solution de la blague geek : « il existe exactement 10 types de personnes dans le monde : celles qui comprennent le binaire, et les autres ! ». Évidemment, la blague prend son sens si l’on lit le « 10 » comme « 10bin », qui vaut alors 2.

Image d’en-tête : travail personnel.

9 commentaires

gravatar
Pépito wrote:

Super article comme d'habitude (en plus pour la blague j'ai eu l'interrogation sur la convertion il y a 1h xd) mais si je peu me permette pour noter une base 10 on ne met rien pour une base 16 on met un $ devant genre $dc143c et pour une base 10 un % devant genre %01101 après c'est juste de la notation donc ça varie

gravatar
Le Hollandais Volant wrote:

@Pépito : en effet, il existe des notations, mais ça varie d’un langage (de prog) ou d’un logiciel, d’une personne, à une autre.

Pour l’hexadécimal, on utilise parfois la notation avec « # », comme pour les couleurs HTML en héxa : #fff, ou bien notation avec « 0x », donc : 0xFFF, car « X » se prononce un peu comme « hex ».

Pour le binaire, j’ai déjà vu un « 0b » avant le nombre : « 0b10101 ».

Pour l’octal, on met généralement un zéro devant le nombre. Écrire 123 revient à écrire 123 en décimal. Écrire 0123, c’est ça en octal et traité comme tel par certains langages. Parfois on rencontre aussi \123, pour l’octal.

La notation avec le 0 est casse-gueule et certains programmes ne le recommandent plus (JavaScript par exemple, a décidé d’abandonner cette notation.

Mais comme tu dis, ce sont des notations d’usage et aucune n’est réellement standardisée, même si beaucoup de programmeurs les reconnaissent.

gravatar
blux wrote:

Et du coup, la base d'un système s'écrit toujours 10 dans ce système...
0x10 = 16
0b10 = 2
10 = 10
\10 = 8

gravatar
juju wrote:

On peut remarquer que dans l'explication du premier principe "Seulement dix chiffres", on trouve plusieurs nombres ("10", "2020"...) qui sont écrit en utilisant le système décimal que le chapitre en cours "Fonctionnement du système décimal" est censé expliquer :) Ça laisserait sans doute perplexe un hypothétique lecteur qui ignorerait son fonctionnement et qui lirait ce chapitre pour le comprendre xD

gravatar
Le Hollandais Volant wrote:

@juju : Voui c’est vrai ^^
Mais j’ai pas voulu surcharger en écrivant « dix » ou « deux mille vingt » partout non plus.

@blux : ça me semble bien résumé :)

gravatar
lythari wrote:

Super article.
Petite coquille sur le tableau pour le binaire :
3 11 On re-remplit le rang 1.
C'est le rang 0.

Sinon le binaire c'est pratique, on peut compter sur ses doigts jusqu'à 1023 au lieu de 10 en utilisant les 10 doigts comme 10 positions binaires.

gravatar
blux wrote:

@lythari :
Faut quand même être bon en additions !

gravatar
MicroNeph wrote:

Cette information est très intéressante à connaitre.

juste pour info: sur l'image c'est pas du binaire, c'est du japonais :)

gravatar
Le Hollandais Volant wrote:

@MicroNeph : Dans le film de Matrix, c’étaient des kanas et kanji de recettes de sushi :)

Dans mon outil, avec lequel j’ai fait l’image, j’ai juste pris une liste de kanas/kanjis prise sur StackOverflow (oui j’assume ma flemme là).


Votre commentaire sera visible après validation par le webmaster.