Bien éviemment, ici je ne désigne pas par "langage binaire" le langage universel que tout le monde parle dans Star Wars (eh! oui, tout le monde parle le binaire, là-dedans), mais plutôt la seule base de calcul que l'ordinateur soit en mesure de comprendre. Mais allons-y doucement, car ça n'a rien d'évident quand on ne sait pas ce que c'est.
Des 0 et des 1
L'ordinateur étant de la famille des Machinis Electronicus, il est essentiellement animé par une foultitude de courants électriques, chacun donnant une information très simple: 0 (le courant ne passe pas) ou 1 (le courant passe). A première vue, on semble très limité, car après tout, l'ordinateur ne sait pas compter jusqu'à 2. Cependant, en assemblant un grand nombre (je veux dire vraiment très grand nombre!!!) de ces petits courants (ou transistors, pour le composant), on arrive à faire déssiner à l'ordinateur un paysage de rêves avec une forêt, des montagnes, un lac et un léger brouillard envoûtant... magique! Mais à la base, l'ordinateur ne comprend que des 0 ou des 1.
Les Bits
Le mot "Bit" vient d'une contraction de "Binary Digit", ou chiffre binaire. En fait, ce que nous appelons chiffre dans notre système décimal (de 0 à 9) est l'équivalent du bit dans le système binaire (de 0 à 1). C'est en assemblant plusieurs de ces bits qu'on obtient finalement des nombres astronomiques (au besoin). Ainsi, le nombre 137 peut être représenté en binaire par 10001001. Ceci n'a rien de magique, c'est purement mathématique:
Les bases de calcul
Nous avons fondé nos mathématiques sur le système décimal. En effet, lorsque nous écrivons nos nombres, nous les composons avec 10 chiffres: de 0 à 9. Analysons de plus près l'écriture d'un nombre en base 10. Pour nous, il semble tout naturel d'écrire 3958. En réalité, voici ce qu'il faut comprendre là-dedans:
3958 = 3000 + 900 + 50 + 8
3958 = 3*10^3 + 9*10^2 + 5*10^1 + 8*10^0
Cette décomposition peut vous paraître obscure au départ, mais en constatant qu'on fait une somme de puissances de 10 (d'où la base 10 - système décimal), on peut partir explorer l'univers des bases de calcul.
Imaginons maintenant que nous comptions en base 5 (on a découvert que certaines tribus d'Afrique avaient développé un système de comptage en base 5, à cause des 5 doigts de la main). Nous n'utiliserions alors que les chiffres 0, 1, 2, 3 et 4. Il existe alors une nouvelle combinaison, à partir de puissances de 5, dont le résultat est 3985:
3985 = 1*5^5 + 1*5^4 + 1*5^3 + 4*5^2 + 2*5^1 + 0*5^0
On en déduit qu'en base 5, 3985 s'écrit 111420 (notez bien que tous les chiffres sont compris entre 0 et 4). On peut évdemment faire de même en base 2:
3985 = 2^11 + 2^10 + 2^9 + 2^8 + 2^7 + 2^4 + 2^0
Donc en base 2, 3985 s'écrit 111110010001. C'est sur ce système que repose toute la puissance de calcul des ordinateurs.
La pack de 8 - l'octet
On peut voir la mémoire de l'ordinateur comme une suite de 0 et de 1. Mais il n'est pas pratique de manipuler ces bits individuellement ; ainsi, on a préféré les regrouper en unités de bases: les octets. Un octet comporte 8 bits (remarquez que 8 est une puissance de 2). Comme pour nos nombres à nous, le bit le plus à gauche et le plus important: c'est le bit de poids fort (le bit le plus à droite est le bit de poids faible)
Mais avec un seul octet, on ne peut compter que jusqu'à 255 au maximum, ce qui n'est pas vraiment suffisant. Alors on a décidé d'associer les octets, par 2, 4, 8 ou même plus (là encore, on utilise les puissances de 2). Voici les assemblages les plus usuels. Pour votre culture informatique (et dans un but moins noble de pur practicité, car en informatique, on parle anglais), j'ai mis leurs noms en anglais également.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bien sûr, on ne s'arrête pas là. Le C++ nous propose de manipuler des nombres sur 20 octets, soit 80 bits (max 1.2*10^4932), ce qui est largement suffisant pour calculer, par exemple, son argent de poche à l'année :-).
![]() |
|
Et les nombres négatifs?
Tiens, c'est vrai, il y a ceux-là, aussi! Ici, les choses se compliquent un peu. Sur une feuille de papier, nous disposons des signes - et + pour décider du signe d'un nombre. Dans un ordinateur, où ne règnent que les 0 et les 1, la règle change. Une chance dans notre malheur: le signe ne peut être que de deux façons différentes. On peut donc utiliser un bit pour le spécifier. Pour cela, on utilisera le bit de poids fort (le plus à gauche). Un 1 signifie que le nombre est négatif. On ne se sert alors que des bits restants pour coder le nombre.
Survient alors un autre problème (quand je vous dis que le gars qui a pensé à tout ça, c'est un génie!): en mathématiques, on a -0 = +0. En informatique, le bit coûte cher, et on ne peut pas se permettre de dire que 10000000 = 00000000. Voici la convention : on dira que 00000000 = 0 et que 10000000 = -1. On constate alors un petit décalage entre le maximum positif et le minimum négatif. En effet, sur un octet, on peut aller de -128 à 127.
D'une manière générale, sur n bits, on va de 0 à 2^n - 1 en non signé ou de -2^(n-1) à 2^(n-1) - 1 en signé.
Quelques remarques
Que ce passe-t-il si on prend un nombre normal (ex: 152) et qu'on décale tous ces chiffres vers la gauche, en remplissant la dernière position par un 0? On obtient 1520, c'est-à-dire 152*10. En binaire, c'est la même chose! En décalant tous les bits vers la gauche et en remplissant avec un 0, on multiplie par 2! En décalant ainsi de n positions, on multiplie par 2^n. De même, en décalant vers la droite, on divise par 2 (division entière, bien sûr).
Pour coder les nombres avec virgules, les choses se compliquent horriblement, et je ne vais pas vous expliquer les détails. Mais une des techniques est de considérer qu'un certain nombre des bits de poids forts représentent la partie entière du nombre, alors que le reste constituent la partie décimale. Cependant, nous n'avons pas à nous soucier de cela, l'ordinateur va nous faire tout cela très bien, sans qu'on s'en apperçoive. Les conséquences d'une telle manière de coder est que d'une part, la partie décimale - et donc la précision des calculs - n'est pas infinie (tout est fini dans un ordinateur), et d'autre part, les calculs avec des nombres à virgules (notamment les images 3D) sont beaucoup plus lents que les calculs d'entiers, que l'ordinateur digère mieux.
Il existe une autre base de calcul que l'ordinateur comprend bien, c'est l'hexadécimal (base 16). Pour les symboles, on utilise de 0 à 9 puis de A à F (A = 10, B = 11 ... F = 15). La conversion entre binaire et hexadécimal est simple, puisqu'à chaque chiffre d'un nombre hexadécimal correspond 1 nibble (4 bits). Exemple :
139 = 10001011b = 8Bh (le "h" signifie que le nombre est écrit en hexadécimal et le "b" signifie binaire)
En effet, 1000b = 8 = 8h et 1011b = 11 = Bh --> 139 = 8Bh
On utilise souvent les notations hexadécimales pour désigner une adresse en mémoire, ou aussi une couleur en HTML.
Voir aussi: Les types de variables - Les opérateurs bit-à-bit