Le binaire

Auteur : Franck CHAMBON, Lycée Lucie Aubrac

Merci à Florent P. pour ses prises de notes de cours, reprises ici.

I - Vocabulaire

Le bit

L'informatique fonctionne avec deux états fondamentaux :

Nb états Nom
2 Binaire
3 Ternaire
8 Octal
10 Décimal
16 Hexadécimal

L'unité élémentaire de stockage est le bit. (Binary digit)

Un disque dur, un CD-ROM, la mémoire vive, sont constitués de cases remplies soit de 0, soit de 1.

Propriété : avec un paquet de nn cases binaires, on peut coder 2n2^n symboles différents.

Exemple 1 : avec 3 cases binaires, on peut coder 23=82^3 = 8 symboles différents

Exemple 2 : avec 8 cases binaires on peut coder 28=2562^8 = 256 symboles différents.

Pour un lot de 8 bits, on parle d'octet (byte).

Remarques

L'octet

En pratique les données informatiques transitent très souvent par paquets de 8 bits, donc par octets. La première raison à cela a été l'utilisation de l'ASCII pour transporter l'information du texte écrit.

l'ASCII

Le codage ASCII utilise un octet :

Il est utilisé pour coder :

Les articles sont écrits là en italiques, car c'est impossible en réalité de les mettre tous.

Pour un texte en anglais, avec une ponctuation classique, l'ASCII est parfaitement adapté.

Pour chaque pays, à une époque, on utilisait une variante de l'ASCII étendu (un pour chaque pays/langue), avec 128 symboles supplémentaires (ceux avec le bit de poids fort égal à 1). Le problème était pour la communication entre utilisateurs de différents pays ; c'était parfois compliqué... En France on utilisait l'encodage latin-1 nommé aussi ISO 8859-1.

Aujourd'hui on utilise souvent un codage UTF-8 avec un nombre variable d'octets pour pouvoir échanger du texte dans n’importe quelle langue, avec smiley...

Conclusion, le poids d'un fichier texte est donné par la règle :

Niveaux de gris

Une autre utilisation de l'octet est de proposer 256 symboles différents, comme 256 nombres différents. Un octet peut représenter un niveau de gris parmi 256.

Une image simple (en 256 niveaux de gris) est une liste de lignes, où chaque ligne est une liste de pixels codés sur un octet. Dans ce cas une image de 600 pixels de large, par 400 pixels de haut pèse 600×400×1=240 ko600×400×1 = 240~\text{ko} (hors compression).


Pour coder d'autres nombres, pour des images plus précises, ou pour d'autres usages, on pourra utiliser plus que 8 bits.

II - Codage des entiers

Les entiers non signés sur 4 bits

On a 24=162^4 = 16 nombres de 00 à 1515.

nn binaire hexadécimal
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Ce tableau est à connaître et à savoir refaire !

Les entiers non signés sur 1 octet (8bits)

Il y a 28=2562^8 = 256 nombres de 00 à 255255.

Par exemple :

On apprendra à faire les conversions binaire vers décimal.

Les entiers non signés sur 32 bits (4 octets).

Il y a 232=42949672962^{32} = 4\,294\,967\,296 nombres de 00 jusqu'à 42949672954\,294\,967\,295.

On retiendra que sur 4 octets, on peut différencier plus de 4 milliards de nombres.

III - Opérations en binaire

Conversion décimal vers binaire

Première technique :

  1. On divise le nombre par deux jusqu'à obtenir un quotient égal à zéro.
  2. On lit les restes dans l'ordre inverse.

Exemple : avec 5353

Le résultat est 53=(110101)253 = (11\,0101)_2.

On préférera compléter à gauche avec deux zéros pour faire des paquets de quatre bits. 53=(00110101)253 = (0011\,0101)_2

Deuxième technique

  1. On cherche à écrire le nombre comme une somme de puissance de deux, (la plus grande possible).
  2. Les puissances obtenues donnent des 1 à l'écriture binaire, les puissances absentes donnent des 0 à l'écriture.

Exemple : avec 5353

Exercice

  1. Vérifier que 203=(11001011)2203 = (1100\,1011)_2
  2. Vérifier que 204=(11001100)2204 = (1100\,1100)_2
  3. Comment peut-on déduire l'écriture de 205205, de 206206 ?

Ajouter un à une écriture binaire

On va faire une boucle sur les chiffres lus, soit on a 1, soit 0, soit on sort dans le vide...

  1. On part du chiffre le plus à droite.
  2. Tant qu'il est égal à 1,
    • on le change en 0,
    • on se décale à gauche.
  3. Si on arrive dans le vide,
    • alors on écrit 1.
    • sinon on change le 0 en 1.

Conversion binaire vers décimal

Chaque chiffre binaire correspond à une puissance de deux.

On lit les chiffres de la droite vers la gauche, cela donne les puissances de 22 : 20=12^0 = 1, puis 21=22^1 = 2, puis 22=42^2 = 4, etc.

Exemple : (11001011)2=1×1+1×2+0×4+1×8+0×16+0×32+1×64+1×128=203(1100\,1011)_2 = 1×1 + 1×2 + 0×4 + 1×8 + 0×16 + 0×32 + 1×64 + 1×128 = 203

Addition d’entiers non signés

Exemple avec 5+7=125+7 = 12

retenues :  1 1 1
-----------
              1 0 1
            + 1 1 1
            -------
            1 1 0 0

Exercice

  1. Vérifier en binaire que 179+75=254179+75=254.
  2. Vérifier en binaire que 13+13+13+13=13×4=5213+13+13+13 = 13×4 = 52.

Et si on essayait de poser aussi les multiplications en binaire ?

Multiplication d’entiers non signés

Exemple avec 13×11=14313×11=143

retenues : 1 1 1 1 0 0 0
-----------
                   1 1 0 1
                 × 1 0 1 1
                 ---------
                   1 1 0 1
                 1 1 0 1 .
                     0 . .
             1 1 0 1 . . .
             =============
           1 0 0 0 1 1 1 1

IV - Conteneurs standards pour les entiers

Sur 8 bits (1 octet)

On a 28=2562^8=256 possibilités.

Pour les entiers signés on partage l'intervalle en deux, zéro étant à la fois positif et négatif, il reste une place, on choisit d'avoir un négatif de plus.

Sur 32 bits (4 octets)

On a 23242^{32} \simeq 4 milliards de possibilités.

Codage des entiers signés

La mauvaise méthode : un bit de signe

  1. On garde le bit de poids fort pour indiquer le signe.
  2. Les autres bits indiquent la valeur numérique.

Il y a deux problèmes :

La bonne méthode : le complément à deux

La bonne nouvelle

Cette méthode résout les deux problèmes précédents :

Aperçu de la méthode

On voudrait (+1)+(1)=0(+1) + (-1) = 0

Sur un conteneur 8-bit, on prépare l'addition à trou, et on déduit que (1)(-1) se code avec 1111 1111.

    0 0 0 0   0 0 0 1
  + 1 1 1 1   1 1 1 1
   ------------------
  1 0 0 0 0   0 0 0 0 

On remarque qu'il reste un bit de poids fort, mais il n'est plus dans le conteneur 8-bit ; il est perdu, et on obtient bien 0 !

On voudrait aussi (+6)+(6)=0(+6) + (-6) = 0

    0 0 0 0   0 1 1 0
  + 1 1 1 1   1 0 1 0
   ------------------
  1 0 0 0 0   0 0 0 0 

Comment obtenir plus rapidement l'opposé d'un entier ?

Obtenir le complément à deux
  1. On part de l'écriture binaire de la partie numérique.
  2. On inverse tous les bits 010↔1.
  3. On ajoute 11.

Exemple avec 6=(00000110)26=(0000\,0110)_2

Exercices

  1. Quel est le complément à 2 sur 8 bits de 105-105 ?
  1. Quel est l'entier représenté en complément à deux sur 8 bits par 1100 1001 ?
  1. Quel est l'entier représenté en complément à deux sur 8 bits par 0000 1101 ?

Nous reviendrons sur ce chapitre pour travailler sur les conversions de bases entre binaire, octal et hexadécimal.