1. Origine du binaire en informatique

Pour communiquer, deux êtres humains doivent parler la même langue. L'échange d'informations entre les composants d'un ordinateur repose sur le même principe.
Dans les années 40, lorsqu'il a fallu passer de l'idée abstraite de machine de Turing (modèle mathématique) à la réalisation concrète du premier ordinateur (machine physique), la question des composants matériels à choisir s'est posée (transistor, lampe, DEL, aimant, tube, bande, …). Pour ces composants, il est possible de réduire leur fonctionnement à 2 états exclusifs l'un de l'autre : état 0 et état 1.
  • le transistor est bloqué (état 0) ou passant (état 1),
  • la lampe est éteinte (état 0) ou allumée (état 1),
  • le ruban est trouée (état 0) ou non (état 1),
  • la bande magnétique présente un pôle Nord (état 0) ou Sud (état 1).
transistor.jpg
Le langage de base finalement choisie pour l'informatique, et encore utilisé aujourd'hui, est le binaire dont l'unité est le bit : binary digit (ou nombre binaire), pouvant prendre comme seules valeurs 0 ou 1.
Analogie : Notre langage humain occidental est lui basé sur 26 valeurs que sont les lettres de l'alphabet. En réalité plus, si l'on compte les accents, la ponctuation ...
communication.png
Mémorisation 0x - Réussite 0/0/4
Combien d'état différents peuvent être définis avec un bits ?
Doit être un entier.

2. Représentation binaire

Un ordinateur réalise des calculs, il faut donc être capable de convertir tous nos nombres habituels écrit en base décimale, sous forme de mots binaires composés uniquement d'une suite de 0 et de 1, c'est-à-dire écrits en base deux.
Pour nos nombres décimaux, le chiffre de poids le plus fort (ici la centaine) est placé à gauche :
Nombre décimal : 257(10) = (2 × 100) + (5 × 10) + (7 × 1) = (2 × 102) + (5 × 101) + (7 × 100)
Il en sera de même en binaire :
Nombre binaire : 1101(2) = (1 × 23) + (1 × 22) + (0 × 21) + (1 × 20) = 23 + 22 + 20 = 8 + 4 + 1 = 13(10)
Pour compter en binaire, il est alors important de connaître ses puissances de 2 par coeur :
210 29 28 27 26 25 24 23 22 21 20
10245122561286432168421
Code source (modification) :
Consulter le guide
sur Wikipédia.
Écrire du HTML
Mémorisation 0x - Réussite 0/0/10
Quel est la valeur décimale du nombre binaire 10(2) ?
Doit être un entier.
À l'inverse, il faut être capable de trouver l'écriture binaire d'un nombre décimal :
Exemple :
26(10) = (1 × 24) + 10
           = (1 × 24) + (1 × 23) + 2 = (1 × 24) + (1 × 23) + (0 × 22) + (1 × 21) + (0 × 20)
           = 11010(2)

3. Méthode de conversion : décimal vers binaire

Méthode des divisions successives par deux :

  1. Réaliser des divisions successives sur le nombre décimal à convertir puis sur les quotients obtenus.
  2. Dès que le quotient vaut 0, lire les restes obtenus de dernier au premier.

Méthode plus intuitive :

methode_intuitive.png
  1. Écrire les puissances de 2 de droite à gauche jusqu'à atteindre la valeur du nombre décimal à convertir.
  2. En commençant par la gauche, si la puissance de 2 est inférieure ou égale au nombre, inscrire 1 sous la puissance de 2 sinon 0 et calculer le reste.
  3. Poursuivre ainsi en comparant les restes aux puissances de 2 jusqu'à atteindre 1=20.
Mémorisation 0x - Réussite 0/0/9
Quel est la représentation binaire de la valeur décimale 255(10) ?
Donner votre réponse sur un minimum de bits et sans espace.
Doit être un mot binaire.

4. Représentation hexadécimale

L'hexadécimal est une représentation plus compacte des nombres. Elle n'est pas utilisée par les machines qui travaillent en binaire mais cette représentation a l'avantage d'être 4 fois plus courte à écrire, ce qui améliore sa lisibilité.
L'hexadécimal utilise 16 symboles : les dix chiffres (de 0 à 9) et les six premières lettres de l'alphabet en majuscule.
Base 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Base 16 0 1 2 3 4 5 6 7 8 9 A B C D E F
Base 2 0000 0001 0010 0011 0100 0101 0110011110001001101010111100110111101111
Conversion des entiers naturels de la représentation hexadécimale à la représentation décimale :
Exemple : A3(16) = 10 × 161 + 3 × 160 = 10 × 16 + 3 × 1 = 160 + 3 = 163(10)
Code source (modification) :
Consulter le guide
sur Wikipédia.
Écrire du HTML
Mémorisation 0x - Réussite 0/0/6
Quelle valeur décimale est représentée par A(16) ?
Doit être un entier.

Pour convertir des entiers naturels de la représentation binaire à la représentation hexadécimale : Il suffit de regrouper les bits par quatre et de leur associer leur chiffre hexadécimal.
Exemple : 0110 1000 0010 1101(2) = 682D(16)

Pour convertir de la base 10 vers la base 16, il sera souvent plus rapide de passer par la base 2 mais la méthode est similaire.
Code source (modification) :
Consulter le guide
sur Wikipédia.
Écrire du HTML
Mémorisation 0x - Réussite 0/0/6
Quelle est la représentation hexadécimale du nombre binaire 1010(2) ?
Doit être un mot hexadécimal.
Compter en binaire c'est comme en décimal : dès que l'on a atteint le maximum (1 en binaire, 9 en décimal) sur un emplacement, il faut ajouter 1 sur l'emplacement à gauche et repartir de 0.
Compteur décimal
Compteur binaire
Décimal012345678910...
Binaire011011100101110111100010011010...
Code source (modification) :
Consulter le guide
sur Wikipédia.
Écrire du HTML
Mémorisation 0x - Réussite 0/0
Compter en binaire jusqu'à 25.
11;12;13;14;15;16;17;18;19;20;21;22;23;24;25 1011;1100;1101;1110;1111;10000;10001;10010;10011;10100;10101;10110;10111;11000;11001
Passons aux additions :
Code source (modification) :
Consulter le guide
sur Wikipédia.
Écrire du HTML
Mémorisation 0x - Réussite 0/0
Poser puis réaliser l'addition décimale de « 23+14 » puis « 15+9 » comme appris en primaire.

Dans une addition avec des nombres binaires, il peut aussi y avoir des retenues, comme en décimal. En base 10, on ne peut pas dépasser le chiffre 9 et les retenues commencent donc à partir de 9. En base 2, on ne peut pas dépasser le chiffre 1 et les retenues commencent donc à partir du chiffre 1.

Exemple :

Poser une addition en binaire
Mémorisation 0x - Réussite 0/0/7
Quel est le résultat binaire de l'addition : 1(2) + 1(2) ?
Doit être un mot binaire.
Remarque : La soustraction repose sur le même principe.
Mémorisation 0x - Réussite 0/0
Poser, comme en primaire, la soustraction décimale 453(10) - 99(10).
453(10) - 99(10) = 354(10)

5. Codage des entiers relatifs (positifs et négatifs) : le binaire signé

Un ensemble de 8 bits forme un octet (appelé Byte en anglais à ne pas confondre avec un bit !).
1 octet = 8 bits

Code source (modification) :
Consulter le guide
sur Wikipédia.
Écrire du HTML
Mémorisation 0x - Réussite 0/0
Sur un octet, il est possible de coder {rep1} valeurs différentes allant {rep2} (plus petite valeur) à {rep3} (plus grande valeur).
Doit être un entier.
Doit être un entier.
Doit être un entier.

Pour coder les entiers négatifs, il faut coder le signe. Dans la représentation en binaire signé sur 8 bits, le bit de poids le plus fort sert à coder le signe. 1 codant pour un entier négatif et 0 pour un entier positif.

Exemple : Pour une représentation binaire signé sur 1 octet : −4(10) = 1000 0100(2𝑠)
Mémorisation 0x - Réussite 0/0/16
Quelle est la représentation en binaire signé sur 8 bits de la valeur décimale 1(10) ?
Doit être un octet.

6. Codage des entiers relatifs : le complément à 2

Pour conserver la propriété d'addition sur les entiers relatifs en binaire, une autre méthode de représentation existe : le complément à 2.
Pour obtenir le complément à 2 d'un nombre :

  • s'il est positif, on prend sa représentation en binaire simple,
  • s'il est négatif, on prend son complément à 1 (en inversant tous les bits : 1 devient 0 et 0 devient 1) et on additionne 1. (Cela revient à inverser que les bits de gauche à droite jusqu'au dernier 1 rencontré que l'on n'inverse pas.)

Le bits de poids le plus fort donne l'information du signe comme en binaire signé : 1 pour – et 0 pour +.

Exemple :
4(10) = 0000 0100(2) = 0000 0100(c2) et -4(10) = 1111 1100(c2)
11(10) = 0000 1011(2) = 0000 1011(c2) et -11(10) = 1111 0101(c2)
Mémorisation 0x - Réussite 0/0
Quel est l'avantage du complément à deux sur le binaire signé pour coder les entiers relatifs ?
Cocher la bonne réponse.
→ Voir la vidéo : Twos complement: Negative numbers in binary de Ben Eater

7. Codage des réels : virgule fixe

7.1. Principe

Tous les réels ne vont pas pouvoir être codés. La puissance des ordinateurs étant limitée, il ne va pas être possible d'écrire les réels possédant un nombre infini de chiffre après la virgule, tel que π. Leur représentation sera toujours une approximation.
Pour convertir la partie fractionnaire d'un nombre, en binaire, il faut utiliser les puissances de 2 négatives.
2-12-22-32-42-52-62-72-8
0,50,250,1250,06250,031250,0156250,00781250,00390625

Cette méthode de codage à virgule fixe reprend le principe du binaire signé :

  • le premier bit code le signe (1 pour – et 0 pour +)
  • une partie des bits suivants codent pour la partie entière (pondération des puissances positives de 2)
  • et les autres pour la partie fractionnaire (pondération des puissances négatives de 2).

Pour un codage sur 1 octet (8 bits) : 1 bit de signe / 3 bits de partie entière / 4 bits de partie fractionnaire
Pour un codage sur 2 octets (16 bits) : 1 bit de signe / 7 bits de partie entière / 8 bits de partie fractionnaire

Exemple :
Pour un codage sur 16 bits à virgule fixe : +10, 25(10) = 0000 1010, 0100 0000(2fix)
Pour la partie entière : 1 × 23 + 0 × 22 + 1 × 21 + 0 × 20 = 8 + 2 = 10
Pour la partie fractionnaire : 0 × 2−1 + 1 × 2−2 = 0 × 0,5 + 1 × 0,25 = 0,25

1 min Mémorisation 0x - Réussite 0/0/8

7.2. Méthode de conversion de la partie fractionnaire : de décimal vers binaire

Pour convertir un nombre fractionnaire en binaire, il faut réaliser des multiplications successives par deux, des parties fractionnaires, en gardant la partie entière des résultats. Dans la plupart des cas, la méthode entraîne une boucle : le résultat sera une suite se répétant à l'infini. Ainsi, la représentation sur un nombre fini de bits introduit obligatoirement une approximation.

Exemple :

Méthode de conversion de la partie fractionnaire
(Image cliquable)
Le résultat s'écrit en binaire :
0,2(10) = 0,0011 0011 0011 0011 0011...(2)

en binaire à virgule fixe sur 16 bits :
0,2(10) = 0000 0000, 0011 0011(2fix)
Mémorisation 0x - Réussite 0/0/14
Donner la représentation en binaire signé à virgule fixe sur 8 bits de la valeur décimale 0,6(10) ?
Doit être un octet.
En programmation, il sera dangereux de vérifier l'égalité de deux nombres à virgule.
Rappelez-vous que certaines valeurs ne sont pas représentables parfaitement en binaire. De la même façon que 13 n'est pas représentable en décimal car cela nécessiterait d'écrire 0,333... suivi d'une infinité de 3 ce qui est impossible, certains nombres ne sont pas représentables parfaitement en binaire et seront donc représentés de manière approchée.

8. Codage des réels : virgule flottante

La technique de représentation des nombres à virgule fixe est simple mais l'ensemble des valeurs représentables est très limité du fait des bits souvent perdus à gauche ou à droite. Une autre technique est celle des nombres à virgule flottante.
Pour représenter un nombre binaire à virgule flottante, il faut d'abord l'exprimer en notation scientifique binaire sous la forme : mantisse×2exposant. La mantisse est obligatoirement supérieure à 1.
Sur 8 bits, la représentation binaire à virgule flottante se compose de : 1 bit pour le signe / 3 bits pour l'exposant / 4 bits pour la partie fractionnaire de la mantisse
Exemple : 2,625(10) = 10,101(2) = 1,0101(2) × 21 = 0100, 0101(2flo)
Le 1 de la partie entière de la mantisse est systématique, il est donc inutile de le coder.
L'exposant peut être négatif donc pour permettre de coder autant d'exposants positifs que négatifs sur seulement 3 bits (soit 8 valeurs possibles), la norme IEEE-754 impose d'ajouter 3 à l'exposant.
Dans notre cas, l'exposant est 1(10) donc 1 + 3 = 4(10) = 100(2).
Mémorisation 0x - Réussite 0/0
Dans la représentation binaire à virgule flottante sur 8 bits,
Cocher la ou toutes les bonnes réponses.
La norme IEEE-754 est réellement définie sur 32 ou 64 bits, ce qui permet d'écrire de très grands nombres.
→ Pour aller plus loin, voir la vidéo : Decimal to IEEE 754 Floating Point Representation de Abishalini Sivaraman

9. Codage des caractères

Dans un second temps, les informaticiens ont commencé à vouloir coder non seulement les nombres mais aussi l'ensemble des caractères. Une première table de correspondance associant à chaque caractère (a, b, !, espace, virgule, …) un mot binaire de 7 bits, a été établie. Cette table a été définie en 1960 et est encore utilisée aujourd'hui. C'est la table ASCII :
Caractère ASCII
(Langage humain)
Code ASCII
décimal
Mot binaire de 7 bits
(Langage machine)
a97110 0001
?63011 1111
→ Voir la table complète sur Wikipédia.
Afin de pouvoir coder les caractères européens (accent, cédille, …), une autre norme a été définit en 1986. Elle s'appelle ISO-8859-1 ou Latin-1. Chaque caractère est alors codé sur 8 bits.
Ces systèmes de codage ont encore évolué afin d'inclure de plus en plus de caractère. La norme Unicode (ou UTF-8) vise à coder tous les caractères du globe et pour cela, elle est capable d'adapter le nombre de bits nécessaire à l'alphabet de 1 à 4 octets.
Exemple : Voici quatre exemples de codage en UTF-8 de caractère :
  • A est codé par 0100 0001(2) = 41(16)
  • Ω est codé par 1100 1110 1010 1001(2) = CE A9(16)
  • ∞ est codé par 1110 0010 1000 1000 1001 1110(2) = E2 88 9E(16)
  • 𐎄 est codé par 1111 0000 1001 0000 1000 1110 1000 0100(2) = F0 90 8E 84(16)
Format de fichier texte
  1. Créer un fichier texte .txt (clic droit / nouveau / document texte) et y écrire la lettre «a». Enregistrer-le (enregistrer sous / format ANSI/ASCII) et déterminer sa taille c'est-à-dire le nombre de bits ou d'octets nécessaires pour le coder (clic-doit / propriétés). Comment justifier son poids ?
    Le fichier texte contenant une lettre fait 1 octet ce qui correspond bien à son codage UTF-8 sur 8 bits.
  2. Prévoir la taille d'un fichier texte contenant la phrase « Salut tout le monde ! ». Vérifier votre hypothèse.
    Ce fichier devrait faire 21 octets car il comporte 21 caractères.
  3. Enregistrer cette fois un fichier contenant la même phrase mais LibreOffice (en .odt) ou OnlyOffice (en .docx). Que constate-t-on ?
    Le même fichier est bien plus lourd car il contient des informations sur la mise en forme utilisée.
  4. Essayer d'ouvrir le fichier .txt avec LibreOffice. Inversement essayer d'ouvrir le fichier .docx ou .odt avec le bloc-note. Que constate-t-on ?
    Word ou LibreOffice sont capable de lire un fichier .txt mais le traitement de texte de base n'est pas capable de lire un fichier .docx ou .odt.
Mémorisation 0x - Réussite 0/0
Combien de caractère peut contenir la table ASCII originelle utilisant 7 bits ?