Aller au contenu

Les donnĂ©es⚓

Comme les instructions, les données sont représentées oar une suite de 0 et de 1.

Afin des les manipuler et effectuer des opérations plus ou moins complexes, l'ordinateur doit savoir de quel type de données il s'agir.

Ainsi les experssions suivantes (en Python) prennent sens avec la classification des données en catégorie ou type.

Text Only
1
2
3
4
5
6
4 + 9
7 * 6
3.1 - 7.8
"Hello " + "World !"
4 == 4.0
True or False

Chacune des données sera représentée en fonction de son type. Dans tous les cas, nous passons par une transcription en une suite de 0 et de 1

ReprĂ©sentation des nombres entiers⚓

1) Le systĂšme dĂ©cimal⚓

Pour que vous compreniez le fonctionnement du binaire, et des systÚmes de comptage en général (plus communément appelés bases), je vais commencer par faire une petite réintroduction à la base 10 que vous connaissez tous.

En effet, tout le monde sait compter en base 10 (décimal). Mais comment ça marche ? Comment est construit notre systÚme ? Pour répondre à cette question à l'apparence simple, oubliez tout et reprenons depuis le début : comment avez-vous appris à compter à l'école ?

Vous penserez peut-ĂȘtre que la base 10 vient du fait qu'on a 10 doigts, mais en tout cas deux choses sont sĂ»res :

Il y a 10 chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Avec ces derniers, on peut compter jusqu'Ă  9.

Et si l'on veut aller au-delĂ  de 9, il faut changer de rang.

Cela signifie que si le rang des unités est plein, il faut passer à celui des dizaines, puis des centaines, milliers et j'en passe.

Par exemple : à 19, le rang des unités est "saturé" (plein), car il contient le chiffre 9, et il n'y a pas (dans la base 10) de valeur plus élevée. Il faut donc incrémenter le rang périphérique puis réinitialiser l'état de celui des unités. Ce qui signifie : j'ai 19, je ne peux pas mettre plus de 9 à droite, donc j'ajoute 1 à celui de gauche et je remets à zéro celui de droite.

Comme je disais tout Ă  l'heure, le nombre entier va ĂȘtre composĂ© de rangs (unitĂ©s, dizaines, centaines, etc). Chaque rang vaut le rang prĂ©cĂ©dent multipliĂ© par l'indice de la base. Une centaine vaut dix dizaines, et une dizaine vaut 10 unitĂ©s. Par exemple, dans l'image ci-dessus, on peut voir le nombre 18510 (ici, le 10 signifie qu'il s'agit d'un nombre, en base 10). Dans ce nombre, on peut voir trois rangs : centaines, dizaines et unitĂ©s. Pour n'importe quelle base, la valeur d'un rang est Ă©gale Ă  bn, oĂč b est l'indice de la base (ici, 10) et n la position du rang. Ici, les unitĂ©s ont la position 0, les dizaines la position 1 et les centaines la position 2. Nous pouvons donc Ă©crire :

185=1∗102+8∗101+5∗100

Ce que je viens de faire, c'est décomposer 185 en puissance de 10 (unités, dizaines, centaines, etc).

Un nombre est égal à la somme des valeurs de ses rangs, et on peut décomposer n'importe quel nombre en puissance de sa base.

2) Le binaire⚓

a) introduction⚓

Le binaire, c'est le systÚme de comptage des ordinateurs. Pourquoi le binaire et pas le décimal comme les humains ? Et bien c'est trÚs simple : un ordinateur est composé de circuits électroniques, et donc de composants électriques. Le plus simple pour compter est donc d'utiliser un systÚme en base 2 (le binaire) car on peut représenter ses deux valeurs possibles (0 et 1) par un signal électrique : 1, y'a du courant, 0, y'en a pas (c'est la version simple).

Je vous ai parlĂ© ci-dessus de rangs. En binaire, c'est pareil Ă  la diffĂ©rence qu'on utilise le terme bit, qui est la contraction de "binary digit", littĂ©ralement "chiffre binaire". Par exemple, le nombre 10011 occupe 5 bits. LĂ  oĂč tout se complique, c'est que comme je l'ai expliquĂ©, chaque rang en binaire ne peut avoir que deux valeurs (binaire = base 2) diffĂ©rentes : 0 ou 1. Pour la base 10, chaque rang reprĂ©sente une puissance de 10, pour la base 2, chaque rang occupe une puissance de 2. Voici comment compter en binaire jusqu'Ă  10 :

Nombre en décimal Nombre en binaire Le pourquoi du comment
0 0 Pour l'instant, ça va.
1 1 LĂ  encore, c'est simple.
2 10 Le premier rang ayant été rempli, on passe au suivant !
3 11 On re-remplit le rang 1.
4 100 Le rang 2 est plein, le rang 1 aussi, qu'Ă  cela ne tienne, on passe au suivant.
5 101 On continue en suivant la mĂȘme mĂ©thode.
6 110 On continue en suivant la mĂȘme mĂ©thode.
7 111 On continue en suivant la mĂȘme mĂ©thode.
8 1000 On commence le rang 4.
9 1001 On continue comme tout Ă  l'heure.
10 1010 On continue comme tout Ă  l'heure.
... ... ...
  • avec 1 bit on peut coder 2 valeurs (0 et 1)

  • avec 2 bits on peut coder 4 valeurs (00, 01, 10 et 11)

  • avec 3 bits on peut coder 8 valeurs (000, 001, 010, 011, 100, 101, 110, 111)

  • avec n bits on peut coder... 2n valeurs (vĂ©rifications : 21 = 2 ; 22 = 4 ; 23 = 8 ...)

Comme on a pu le voir, compter jusqu'à 10 ou 20 reste aisé, mais imaginons un instant que je vous demandasse d'écrire 185 en binaire ? Vous allez faire chaque rang, un par un ?

b) Conversion dĂ©cimale binaire⚓

Pour l'instant, on n'a compté que jusqu'à 10. Mais pour les plus grands nombres, la méthode précédente peut se révéler fastidieuse

La méthode :

Il existe bien sûr plusieurs méthodes de conversion, mais nous allons étudier la plus simple et la plus rapide. Il s'agit de la méthode euclidienne.

Cette mĂ©thode, en plus d'ĂȘtre facile Ă  utiliser en programmation (c'est un algorithme) est une des meilleures lorsqu'il s'agit de traiter les grands nombres.

Voici la méthode :

On prend le nombre en base 10 (forme normale). On le divise par 2 et on note le reste de la division (soit 1 soit 0) On refait la mĂȘme chose avec le quotient prĂ©cĂ©dent, et on met de nouveau le reste de cĂŽtĂ©. On rĂ©itĂšre la division, jusqu'Ă  ce que le quotient soit 0. Le nombre en binaire apparaĂźt alors : il suffit de prendre tous les restes de bas en haut. Et l'exemple :

185 = 2 x 92 + 1

92 = 2 x 46 + 0

46 = 2 x 23 + 0

23 = 2 x 11 + 1

11 = 2 x 5 + 1

5 = 2 x 2 + 1

2 = 2 x 1 + 0

1 = 2 x 0 + 1

Attention, il faut bien lire de bas en haut !

185 en base 10 vaut donc 10111001 en binaire.

c) Conversion binaire dĂ©cimale⚓

Je vous rassure tout de suite : c'est plus simple dans ce sens-lĂ  que dans l'autre.

Prenons un nombre au hasard, tel que 11010011. Il s'étale sur 8 rangs, et comme dit précédemment, chaque rang correspond à une puissance de deux. Le premier rang (en partant de la droite) est le rang 0, le second est le 1, etc.

Pour convertir le tout en décimale, on procÚde de la maniÚre suivante : on multiplie par 20 la valeur du rang 0, par 21 la valeur du rang 1, par 22 la valeur du rang 2, [...], par 210 la valeur du rang 10, etc.

AprĂšs ça, il ne reste plus qu'Ă  remplacer les puissances de 2 par leurs valeurs et de calculer la somme : (Attention Ă  bien partir de la droite !) 11010011binaire=1∗1+1∗2+0∗4+0∗8+1∗16+0∗32+1∗64+1∗128=211dĂ©cimal

3) L'hexadĂ©cimal⚓

a) introduction⚓

Le binaire, c'est bien pratique : on peut coder des nombres uniquement avec des 0 et des 1. C'est bien pour les signaux Ă©lectriques et tout le bazar, mais dans la vie de tous les jours c'est pas bien facile d'utilisation. On utilise couramment la base 10. Le problĂšme c'est qu'en informatique, tout est basĂ© sur le binaire, et Ă©tant une base d'indice 2, c'est plus aisĂ© d'encoder les informations sur un nombre multiple de 2. On utilise donc souvent la base 16, appelĂ© systĂšme hexadĂ©cimal (hexa = 6, dĂ©ci = 10, 16 = 6 + 10) car 16 est un multiple de 2, et qu'il permet de reprĂ©senter 8 bits avec seulement 2 chiffres. Ça paraĂźt simple, mais il y a un autre problĂšme : en base 10, on utilise 10 chiffres. En base 2 (binaire) on utilise seulement 2 chiffres : 0 et 1. Mais du coup, en base 16, il faut 16 chiffres. OK, 0 1 2 3 4 5 6 7 8 9.. quoi aprĂšs ? On prend des lettres de l'alphabet.

Ce qui donne :

0 1 2 3 4 5 6 7 8 9 A B C D E F

On peut Ă©tablir une liste de correspondances entre la base 10 et la base 16 (voire mĂȘme la base 2) :

Binaire (base 2) Décimal (base 10) Hexadécimal (base 16)
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F

Comme vous pouvez le voir, le plus grand chiffre en hexadécimal est F, et il correspond à 15 en décimal et 1111 en binaire : F est donc encodé sur 4 bits (Fhex=1111bin, 4 chiffres binaires = 4 bits).

b) Convertir un nombre binaire en hexadĂ©cimal (et vice versa)⚓

Pour convertir un nombre binaire en base 16, on regroupe les bits 4 Ă  4, chaque groupe donnant un chiffre hexadĂ©cimal. À l'inverse, passer d'un nombre hexadĂ©cimal Ă  sa reprĂ©sentation binaire se fait en remplaçant chaque chiffre pour son Ă©quivalent sur 4 bits. Ainsi, 110110012=1101 10012=D916, tandis que 7F16=0111 11112=011111112.

Attention, si le nombre binaire de dĂ©part n'a pas un nombre de bits multiple de 4, il faut ajouter des zĂ©ros en tĂȘte (ce qui ne change pas sa valeur) afin de pouvoir les regrouper 4 par 4.

c) Convertir un nombre dĂ©cimal en hexadĂ©cimal⚓

Pour convertir un nombre décimal en hexadécimal, la méthode est similaire au binaire, sauf que cette fois on divise par 16.

185 = 16 x 11 + 9

11 = 16 x 0 + 11 (c'est Ă  dire B)

Attention, il faut bien lire de bas en haut !

185 en base 10 vaut donc B9 en hexadécimal.

d) Convertir un nombre hexadĂ©cimal en dĂ©cimal⚓

Le principe est le mĂȘme que pour la conversation "binaire en dĂ©cimal" sauf qu'au lieu d'utiliser des 2n on utilise des 16n :

exemple :

12B716 = 1×163 + 2×162 + 11×161 + 7×160=1×4096 + 2×256 + 11×16 + 7= 4096 + 512 + 176 + 7 = 4791

Vous avez remarquĂ© que quand on trouve un B dans le nombre Ă©crit en hexadĂ©cimal, on le remplace par un 11 dans le calcul. C'est exactement la mĂȘme chose quand on trouve :

  • un A, on le remplace par un 10

  • un C, on le remplace par un 12

  • un D, on le remplace par un 13

  • un E, on le remplace par un 14

  • un F, on le remplace par un 15