binary code

C1-REDO-02 binaire#

Objectifs#

La représentation binaire est la base dans un ordinateur. Ce cours traverse les objets suivants :

  • construire des nombres entiers en base 2, 10 et 16

  • convertir des nombres entre les différentes bases

  • comprendre la notation en bytes

  • introduire les ordres de grandeurs KB, MB, GB, etc..

Tour de magie introductif#

Dans le tour de magie appelé “L’ordinateur magique”, le binaire est approché.

Règles du tour#

  • Le magicien demande à une personne de choisir un nombre entre 1 et 63

  • Le magicien présente les cartes et demande de répondre à la question pour chacune des 6 cartes : “Le nombre se trouve-t-il sur la carte ?”

  • Le magicien trouve le nombre

Les cartes#

Ordinateur magique

Explications du tour#

Observez le premier chiffre qui se trouve en haut à gauche de chaque carte.

carte 6

carte 5

carte 4

carte 3

carte 2

carte 1

32

16

8

4

2

1

25

24

23

22

21

20

Tous les nombres d’une carte x ont un 1 à la position x depuis la droite (l’exposant de la puissance de 2)

Définition : nombre entier binaire#

Un nombre entier binaire est un nombre qui s’écrit uniquement avec les deux symboles 0 et 1.

Définition : nombre entier décimal#

Un nombre décimal est un nombre qui s’écrit uniquement avec les dix symboles 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9

Définition : un bit#

un bit est l’unité la plus simple dans le système binaire. Il peut prendre la valeur 0 ou 1

L’abbréviation du bit est le b minuscule

Définition : un octet (en anglais un byte)#

un octet (en anglais un byte) est formé de huit bits.

Attention : il est d’usage d’utiliser l’abbréviation B (majuscule) pour noter un byte pour éviter la confusion avec le b (minuscule) du bit

*Exemple : 00111010 est un byte (qui représente la valeur 58 en décimal)

Définition : little et big endian, poids des bits#

Lorsqu’on écrit un nombre en binaire, il s’agit de savoir comment le lire.

  • Si on lit de droite à gauche (notation dite little endian), alors le bit de poids le plus faible (celui qui représente la puissance la plus faible donc \(2^0\) se trouve à droite

  • Si on lit de gauche à droite (notation dite big endian), alors le bit de poids le plus faible (celui qui représente la puissance la plus faible donc \(2^0\) se trouve à gauche

NOUS UTILISERONS TOUJOURS LA NOTATION LITTLE ENDIAN DANS CE COURS

Conversion d’un nombre décimal en binaire#

Il existe deux algorithmes (techniques) pour convertir un nombre entier de la base 10 à la base 2. Par souci de simplification, on adopte la nommenclature \(_{10}\) pour un entier en base 10 et \(_{2}\) pour un entier en binaire.

Par division#

  1. Diviser le nombre entier en base 10 par 2 successivement

  2. En conservant les restes, on obtient le résultat en lisant de gauche à droite

Exemple

58 en base 10

  1. \(\frac{58}{2} = 29\), reste \(0\)

  2. \(\frac{29}{2} = 14\), reste \(1\)

  3. \(\frac{14}{2} = 7\), reste \(0\)

  4. \(\frac{7}{2} = 3\), reste \(1\)

  5. \(\frac{3}{2} = 1\), reste \(1\)

  6. \(\frac{1}{2} = 0\), reste \(1\)

le nombre 58 s’écrit donc en binaire en lisant de bas en haut les restes : 111010

Par soustraction#

  1. Retrancher successivement le nombre de la plus grande puissance de 2 possible

Exemple

  1. \(58_{10} - 1 \times 2^5 = 58_{10} - 32_{10} = 26_{10}\) donc 1

  2. \(26_{10} - 1 \times 2^4 = 10_{10}\) donc 1

  3. \(10_{10} - 1 \times 2^3 = 2_{10}\) donc 1

  4. \(2_{10} - 0 \times 2^2 = 2_{10}\) donc 0

  5. \(2_{10} - 1 \times 2^1 = 0_{10}\) donc 1

  6. \(0_{10} - 0 \times 2^0 = 0_{10}\) donc 0

Le nombre 58 s’écrit donc en binaire en lisant de haut en bas : 111010

Exercice 1#

Essayez de convertir en binaire les nombres suivants avec une écriture sur 6 bits :

  • 0

  • 23

  • 45

  • 63

Exercice 2#

Combien de bits faudrait-il pour coder le nombre 64 ? Et le nombre 128 ?

Exercice 3 (pour aller plus loin)#

Vous souhaitez créer un tour pour votre petite soeur ou votre petit frère avec uniquement 4 cartes. Combien de nombre différents peut-on représenter avec 4 bits ?

Conseil : les nombres vont de 0000 à 1111

Conversion d’un nombre binaire en décimal (base 2 à base 10)#

L’opération inverse se fait par addition.

  • Additionner les différentes puissances de deux pour obtenir le nombre en base 10

Exemple :

11010010 donne :

  1. \(0 \times 2^0 = 0\)

  2. \(1 \times 2^1 = 2\)

  3. \(0 \times 2^2 = 0\)

  4. \(0 \times 2^3 = 0\)

  5. \(1 \times 2^4 = 16\)

  6. \(0 \times 2^5 = 0\)

  7. \(1 \times 2^6 = 64\)

  8. \(1 \times 2^7 = 128\)

donc \(11010010_{2}\) vaut \(2+16+64+128\) donc \(210_{10}\)

Remarque : c’est l’explication algorithmique du tour de magie

Exercice 4#

Convertir les nombres suivants en décimal :

  • 1001

  • 110110110

  • 100000001

  • 101010101010101010

Définition : nombre entier hexadécimal#

Un nombre entier hexadécimal est un nombre entier qui s’écrit uniquement avec les seize symboles 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F

Conversion d’un nombre entier binaire en hexadécimal (base 2 à base 16)#

Il suffit de regrouper les bits par paquets de 4, quitte à rajouter des 0 sur les bits de poids fort (à gauche)

Exemple :

  1. \(101001000011_{2}\) en base 2

  2. \(1010_{2} , 0100_{2}, 0011_{2}\) toujours en base 2

  3. \(1010_{2} = A_{16}\), \(0100_{2} = 4_{16}\), \(0011_{2} = 3_{16}\)

  4. En base 16 : A43

Exercice 5#

Convertissez le nombres binaires suivants en base 16:

  • 010010

  • 1000

  • 1111

  • 01001010101011

  • 11100101010011010 (combien de bytes pour ce nombre binaire ?)

suffixes pour les grandes valeurs#

Dans le Système international d’unités, il est d’usage d’utiliser des préfixes que l’on ajoute avant l’unité.

Ainsi :

Nom

Symbole (fr/en)

Valeur

Kilooctet

ko (kB)

\(10^{3}\) octets = 8 kb

mégaoctet

Mo (MB)

\(10^{6}\) octets = 8 Mb

gigaoctet

Go (GB)

\(10^{9}\) octets = 8 Gb

téraoctet

To (TB)

\(10^{12}\) octets = 8 Tb

pétaoctet

Po (PB)

\(10^{15}\) octets = 8 Pb

exaoctet

Eo (EB)

\(10^{18}\) octets = 8 Eb

zettaoctet

Zo (ZB)

\(10^{21}\) octets = 8 Zb

yottaoctet

Yo (YB)

\(10^{24}\) octets = 8 Yb

Attention : lorsqu’on parle de capacité, on préférera le terme français “octet” plutôt que byte qui est phonétiquement trop proche de bit