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 : poids des bits#

Une suite de bits (par exemple 1010) peut se lire de gauche à droite ou de droite à gauche. C’est une convention (un choix). Il s’agit simplement de savoir où placer le bit qui représente la puissance de \(2\) la plus faible, soit \(2^0\).

Ainsi dans l’exemple, 1010, si l’on lit

  • de gauche à droite, le bit de poids le plus fort est 0 et : \(101\underline{0}_2 = 5_{10}\)

  • de droite à gauche, le bit de poids le plus fort est 1 et : \(\underline{1}010_2 = 10_{10}\)

DANS CE COURS, NOUS LISONS DE DROITE A GAUCHE

Définition : little et big endian#

Le terme pour savoir si on lit une suite de bit de droite à gauche ou de gauche à droite est l’endianess :

  • Si on lit de droite à gauche (notation dite little endian), alors le bit de poids le plus faible se trouve à droite

  • Si on lit de gauche à droite (notation dite big endian), alors le bit de poids le plus faiblese trouve à gauche

NOUS UTILISERONS TOUJOURS LA NOTATION LITTLE ENDIAN DANS CE COURS

Signification d’un nombre binaire#

Un nombre écrit en binaire est un nombre uniquement écrit avec une suite de \(1\) et de \(0\). Chaque position en notation little endian (donc en lisant de droite à gauche représente une puissance de \(2\) :

position 7

position 6

position 5

position 4

position 3

position 2

position 1

position 0

128

64

32

16

8

4

2

1

27

26

25

24

23

22

21

20

Ainsi, si l’on prend le nombre binaire \(10110101\) que l’on place chaque 1 et 0 à sa position puis que l’on additionne la valeur de la puissance de deux correspondant à sa position (\(1\) : on prend, \(0\) on ne prend pas :

position 7

position 6

position 5

position 4

position 3

position 2

position 1

position 0

1

0

1

1

0

1

0

1

128

0

32

16

0

4

0

1

\(10110101\) en binaire donne donc \(128 + 32 + 16 + 4 + 1 = 181\)

Convention d’écriture#

Il y a un problème lorsqu’on compare ou que l’on converti des nombres entre la base \(2\) (binaire) et la base \(10\) (décimale). Il nous faut donc une manière de les distinguer.

Dans ce cours, nous utiliserons toujours la notation \(_{base}\) (indice) pour décrire la base du nombre.

  • Le nombre cent en base \(10\) s’écrit \(100_{10}\)

  • Le nombre quatre en base \(2\) s’écrit \(100_2\)

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 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_{10}\)

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

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

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

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

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

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

le nombre \(58_{10}\) s’écrit donc en binaire en lisant de bas en haut les restes : \(111010_{2}\)

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_{10}\) s’écrit donc en binaire en lisant de haut en bas : \(111010_{2}\)

Fiche d’exercices + corrigé#

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_{2}\) donne :

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

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

  3. \(0 \times 2^2 = 0_{10}\)

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

  5. \(1 \times 2^4 = 16_{10}\)

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

  7. \(1 \times 2^6 = 64_{10}\)

  8. \(1 \times 2^7 = 128_{10}\)

donc \(11010010_{2}\) vaut \(2_{10}+16_{10}+64_{10}+128_{10}\) 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