Numération binaire

Nombres et chiffres

Dans la section précédente, nous avons vu que toutes les informations gérées par un système numérique étaient représentées par des suites de nombres avec une précision finie. Nous avons proposé un exemple dans lequel nous effectuons des relevés de température à intervalles réguliers et nous notons les valeurs arrondies au degré près.

Dans la vie courante, pour noter ces valeurs, nous utilisons généralement le système de numération décimal (également appelé base 10), dans lequel les nombres s’écrivent à l’aide de dix chiffres (0, 1, 2, 3, 4, 5, 6, 7, 8 et 9). Ici, nous prendrons bien soin de distinguer les notions de chiffre et de nombre : les chiffres sont des symboles qui servent à écrire les nombres. Dans notre exemple, la représentation des informations est donc à deux niveaux :

  1. Une température est représentée par un nombre.
  2. Un nombre est représenté par des chiffres.

Le fait d’utiliser dix chiffres est purement arbitraire. Historiquement, ce choix découle certainement du fait que nous utilisons les doigts de nos deux mains pour compter, ce qui donne un statut particulier à la notion de dizaine. En réalité, d’autres systèmes de numération sont possibles.

Compter en décimal

Un chiffre seul représente un nombre entier compris entre zéro et neuf. Un nombre supérieur ou égal à dix s’écrira comme une séquence de chiffres, chacun associé à un poids différent en fonction de sa position : unités, dizaines, centaines, milliers, etc. Par exemple, en notation décimale, le nombre 7405 se décompose de la manière suivante :

1000 100 10 1
7 4 0 5

La première ligne du tableau indique le poids associé à chaque chiffre. Le chiffre le plus à droite a toujours un poids égal à 1. En continuant de droite à gauche, le poids d’un chiffre est égal à dix fois le poids du chiffre précédent.

La valeur de ce nombre s’obtient en multipliant la valeur de chaque chiffre par le poids qui lui est associé, et en additionnant les produits :

7×1000+4×100+0×10+5×1=74057 \times 1000 + 4 \times 100 + 0 \times 10 + 5 \times 1 = 7405

Ou encore :

7×103+4×102+0×101+5×100=74057 \times 10^3 + 4 \times 10^2 + 0 \times 10^1 + 5 \times 10^0 = 7405

Dans le cas général, un nombre entier naturel KK s’écrit en décimal comme une séquence de NN chiffres dN1dN2d2d1d0d_{N-1} d_{N-2} \ldots d_{2} d_{1} d_{0} tels que :

K=i=0N1di10iK = \sum_{i=0}^{N-1}d_i \cdot 10^i

Système binaire

En électronique numérique, le choix s’est porté sur un système à deux chiffres, le système de numération binaire (également appelé base 2). Un chiffre binaire est appelé un bit, contraction de l’anglais « binary digit ». Il peut prendre les valeurs 0 et 1.

Le bit constitue la plus petite unité d’information possible. Un bit suffit pour représenter l’état d’un système simple fonctionnant en tout-ou-rien : une lampe allumée ou éteinte, un interrupteur ouvert ou fermé, la présence ou l’absence d’un objet devant un capteur, etc. En regroupant plusieurs bits, il est possible de représenter des ensembles de valeurs plus grands. Par exemple :

À chaque fois que l’on ajoute un bit, on multiplie par deux le nombre de valeurs possibles. Avec NN bits, il est donc possible de représenter 2N2^N valeurs différentes.

Le plus souvent, en informatique, les données sont représentées par des groupes dont la taille est multiple de huit. Un groupe de huit bits est appelé un octet, ou en anglais un byte.

Dans la suite de ce document, nous ajouterons le suffixe « bin » aux valeurs représentées en binaire afin de les distinguer des valeurs représentées en décimal. Par exemple :

Compter en binaire

Un bit seul représente un nombre égal à zéro ou un. Un nombre supérieur ou égal à deux s’écrira comme une séquence de bits, chacun associé à un poids différent en fonction de sa position : le bit le plus à droite a toujours un poids égal à 1 ; en continuant de droite à gauche, le poids d’un bit est égal à deux fois le poids du bit précédent.

Par exemple, le nombre 10101101bin10101101_{bin} se décompose de la manière suivante :

128 64 32 16 8 4 2 1
1 0 1 0 1 1 0 1

La valeur de ce nombre s’obtient en multipliant la valeur de chaque bit par le poids qui lui est associé, et en additionnant les produits :

1×128+0×64+1×32+0×16+1×8+1×4+0×2+1×1=1731 \times 128 + 0 \times 64 + 1 \times 32 + 0 \times 16 + 1 \times 8 + 1 \times 4 + 0 \times 2 + 1 \times 1 = 173

Ou encore :

1×27+0×26+1×25+0×24+1×23+1×22+0×21+1×20=1731 \times 2^7 + 0 \times 2^6 + 1 \times 2^5 + 0 \times 2^4 + 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 173

Dans le cas général, un nombre entier naturel KK s’écrit en binaire comme une séquence de MM bits bM1bM2b2b1b0b_{M-1} b_{M-2} \ldots b_{2} b_{1} b_{0} tels que :

K=i=0M1bi2iK = \sum_{i=0}^{M-1}b_i \cdot 2^i

Plus de puissances de deux

Les puissances de deux sont identifiables au fait que leur représentation binaire ne comporte qu’un bit à 1. Il est recommandé de connaître par cœur les valeurs ou les ordres de grandeurs de certaines puissances de deux caractéristiques.

Puissance de deux Décimal Binaire
202^0 1 0…0 0001
212^1 2 0…0 0010
222^2 4 0…0 0100
232^3 8 0…0 1000
242^4 16 0…0 0001 0000
252^5 32 0…0 0010 0000
262^6 64 0…0 0100 0000
272^7 128 0…0 1000 0000
282^8 256 0…0 0001 0000 0000
292^9 512 0…0 0010 0000 0000
2102^{10} 1 024 (proche de 1000) 0…0 0100 0000 0000
2162^{16} 65 536 0…0 0001 0000 0000 0000 0000
2202^{20} 1 048 576 (proche de 1 000 000) 0…0 0001 0000 0000 0000 0000 0000

2102^{10} étant proche de mille, il est fréquemment utilisé comme facteur pour mesurer de grandes quantités de données. Par abus de langage on parle de kilooctet (ou ko, en principe mille octets) alors qu’on mesure en réalité 1024 octets. De même on parle de mégaoctet (ou Mo, en principe un million d’octets) alors qu’on mesure en réalité 1 048 576 octets.

Pour éviter des confusions, les principaux préfixes normalisés sont les suivants :

Préfixe Symbole Facteur
kibi Ki 210=1 0242^{10} = 1\ 024
mébi Mi 220=1 048 5762^{20} = 1\ 048\ 576
gibi Gi 230=1 073 741 8242^{30} = 1\ 073\ 741\ 824
tébi Ti 240=1 099 511 627 7762^{40} = 1\ 099\ 511\ 627\ 776

On ne doit donc pas parler de kilooctet (ko) mais de kibioctet (Kio).

Du décimal au binaire

Une erreur fréquente chez les débutants consiste à croire qu’il existe des nombres décimaux et des nombres binaires. En réalité, un nombre n’est ni décimal, ni binaire. Un nombre représente juste une quantité abstraite qui peut s’écrire en utilisant le système décimal, le système binaire, les chiffres romains ou tout autre système de notre choix. Par exemple, l’octet 10101101bin10101101_{bin} et les chiffres 173dec173_{dec} représentent exactement le même nombre.

Pour obtenir la représentation binaire d’un nombre, il existe typiquement deux manières de procéder.

Par soustractions successives de puissances de deux

Supposons que nous souhaitions connaître la représentation binaire du nombre 45 sur 8 bits. Nous nous proposons de compléter le tableau suivant :

128 64 32 16 8 4 2 1
? ? ? ? ? ? ? ?

Nous allons parcourir ce tableau du bit de poids fort (à gauche) vers le bit de poids faible (à droite).

128 64 32 16 8 4 2 1
0 0 1 ? ? ? ? ?

Nous devons à présent représenter la valeur 4532=1345 - 32 = 13 avec les bits restants.

128 64 32 16 8 4 2 1
0 0 1 0 1 ? ? ?

Nous devons à présent représenter la valeur 138=513 - 8 = 5 avec les bits restants. En observant que 5=4+15 = 4 + 1, nous pouvons rapidement compléter le tableau :

128 64 32 16 8 4 2 1
0 0 1 0 1 1 0 1

Nous pouvons vérifier le résultat en calculant :

32+8+4+1=4532 + 8 + 4 + 1 = 45

Par divisions successives

Cette fois, nous allons parcourir le tableau du bit de poids faible (à droite) vers le bit de poids fort (à gauche).

Nous observons que le nombre 45 est impair. Or, seul le bit de poids faible a un poids impair. Nous pouvons donc inscrire un 1 dans la case correspondante :

128 64 32 16 8 4 2 1
? ? ? ? ? ? ? 1

Nous devons à présent représenter la valeur 451=4445 - 1 = 44 avec les bits restants. Si nous divisons cette valeur par deux, et si nous divisons en même temps les poids par deux, cela revient à représenter la valeur 2222 en binaire sur 7 bits :

64 32 16 8 4 2 1
? ? ? ? ? ? ? 1

Nous observons que le nombre 22 est pair. Le bit de poids 1 est donc forcément nul :

64 32 16 8 4 2 1
? ? ? ? ? ? 0 1

Nous devons à présent représenter la valeur 220=2222 - 0 = 22 avec les bits restants. Si nous divisons cette valeur par deux, et si nous divisons en même temps les poids par deux, cela revient à représenter la valeur 1111 en binaire sur 6 bits :

32 16 8 4 2 1
? ? ? ? ? ? 0 1

Nous observons que le nombre 11 est impair. Le bit de poids faible est donc égal à 1 :

32 16 8 4 2 1
? ? ? ? ? 1 0 1

Nous devons à présent représenter la valeur 111=1011 - 1 = 10 avec les bits restants. Si nous divisons cette valeur par deux, et si nous divisons en même temps les poids par deux, cela revient à représenter la valeur 55 en binaire sur 5 bits :

16 8 4 2 1
? ? ? ? ? 1 0 1

Nous observons que le nombre 5 est impair. Le bit de poids faible est donc égal à 1 :

16 8 4 2 1
? ? ? ? 1 1 0 1

Nous devons à présent représenter la valeur 51=45 - 1 = 4 avec les bits restants. Nous pouvons immédiatement compléter le tableau en écrivant 1 sous le poids 4, et 0 partout ailleurs.

16 8 4 2 1
0 0 1 0 1 1 0 1

Cette technique peut sembler plus fastidieuse que la précédente. La technique des soustractions successives est rapide lorsque nous devons déterminer la représentation binaire d’un nombre à la main. La technique des divisions successives repose sur des opérations plus simples (déterminer si un nombre est pair, diviser par deux) et peut être facilement programmée.

Voici un algorithme pour obtenir la représentation binaire b d’un entier K sur N bits :

pour i de 0 à N-1 répéter
    si K est pair alors
        b[i] ← 0
    sinon
        b[i] ← 1
    fin si
    K ← partie entière(K/2)
fin répéter

Représentation des valeurs binaires dans un circuit électronique numérique

Comme en électronique analogique, un circuit numérique est construit avec des composants qui réagissent à des variations de tension, de courant ou d’impédance. Cela signifie qu’un circuit numérique ne manipule pas des nombres abstraits mais que ces nombres doivent être eux-mêmes traduits en grandeurs électriques.

Typiquement, un circuit numérique possède deux broches d’alimentation. Elles sont souvent nommées VDDV_{DD} (pôle positif) et VSSV_{SS} (pôle négatif) pour les circuits composés de transistors à effet de champ.

Ainsi, dans un circuit électronique numérique, la représentation des informations est à trois niveaux. Par exemple, dans un thermomètre électronique :

  1. Une température est représentée par un nombre.
  2. Un nombre est représenté par un groupe de bits.
  3. Chaque bit est représenté par un niveau de tension électrique.

Résumé

Un chiffre binaire est appelé un bit (binary digit). Il peut prendre les valeurs 0 et 1.

Un groupe de huit bits est appelé un octet, ou en anglais un byte.

Un groupe de NN bits peut représenter 2N2^N valeurs différentes. Par exemple, il peut représenter les entiers naturels de 0 à 2N12^N-1.

Dans le système de numération binaire, chaque bit possède un poids égal à une puissance de deux.

En électronique numérique, un bit est représenté par un niveau de tension électrique, proche de VDDV_{DD} pour un 1, proche de VSSV_{SS} pour un 0.