Représentation des données 1 C o u r s o r i g i n a l : 2 0 0 8, P A T R I C K H O C H U L I. P o w e r P o i n t : 2 0 0 9, M A N U E L F R A G N I È R E.
0.1. Les systèmes numériques 2 Comment écrire le nombre «sept mille deux cents trois»? En toutes lettres (voir ci-dessus). De façon symbolique.
0.2. La première symbolisation des nombres Les Mésopotamiens : 2450 avant J.-C. Ils comptent avec des clous et des chevrons. 3
0.3. La numération de position Les Babyloniens invente la numération de position. La valeur d un signe varie selon sa position dans l écriture du nombre. Ils utilisent un système sexagésimal (la base 60). Ils réservent une place pour le «zéro». 4
1.1. La base 2 et les nombres entiers Comment écrire le nombre «sept mille deux cents trois»? Avec une numération de position en base 10 : 7 10 3 + 2 10 2 + 0 10 1 + 3 10 0 = 7203 En informatique, on utilise la base 2. Les deux symboles utilisés : 0 et 1. Ces symboles sont appelés bit (BInary digit). Un ordinateur manipule des données diverses : des entiers, des réels, des textes, des images, des sons. Toute donnée devra être représentée par des entiers binaires. 5
1.1.1. Passage de la base 2 à la base 10 Il suffit d additionner les puissances de 2. 6 Exemple : (11001) 2 (11001) 2 = 1 2 4 + 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 = 16 + 8 + 1 = 25
1.1.2. Passage de la base 10 à la base 2 Il faut décomposer le nombre en base 10 en puissance de 2. Il faut connaître les premières puissances de 2 par cœur! 2 0 = 1 2 1 = 2 2 2 = 4 2 3 = 8 2 4 = 16 2 5 = 32 2 6 = 64 2 7 = 128 2 8 = 256 2 9 = 512 2 10 = 1024... Exemple : Convertir (157) 10 en base 2. 7 (157) 10 = 128 + 16 + 8 + 4 + 1 = 1 2 7 + 0 2 6 + 0 2 5 + 1 2 4 + 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = = (10011101) 2
1.1.2. Passage de la base 10 à la base 2 Unité d information : l octet («byte» en anglais). 1 octet = 8 bits. Quelle notation est la plus lisible? 1 256 245 1256245 8 101110011101 1011 1001 1101
1.1.2. Passage de la base 10 à la base 2 Un octet peut représenter 2 8 nombres entiers : 256 nombres de 0 à 255 (2 8 1). C est trop petit! Les ordinateurs codent les nombres entiers sur 16 bits : 65 536 entiers possibles! Avant 1998, 1 kilooctet = 1024 octets. 9 En 1998, l International Electrotechnical Commission (IEC) a standardisé ces unités : 1 kilooctet 1 ko 1000 octets 1 Mégaoctet 1 Mo 1000 ko = 1 000 000 octets 1 Gigaoctet 1 Go 1000 Mo = 1 000 000 000 octets 1 Téraoctet 1 To 1000 Go = 1 000 000 000 000 octets
1.1.2. Passage de la base 10 à la base 2 Malheureusement, de nombreux logiciels (y compris certains systèmes d exploitation) utilisent toujours la notation antérieure à 1998. 10 L ICE a donc défini une nouvelle unité, le kilo binaire (kibi), le Méga binaire (Mébi), le Giga binaire (Gibi), le Téra binaire (Tébi) : 1 kibioctet 1 kio 1024 octets 1 Mébioctet 1 Mio 1024 kio = 1 048 576 octets 1 Gibioctet 1 Gio 1024 Mio = 1 073 741 824 octets 1 Tébioctet 1 Tio 1024 Gio = 1 099 511 162 778 octets
1.2. Les nombres entiers négatifs Il faut coder le nombre de façon à savoir si l entier est positif ou négatif. Première idée : le bit de poids fort. 0 correspond au signe + et 1 correspond au signe. Exemple, 2 et -2 : Deux inconvénients : Le zéro est codé de deux manières différentes : (0) 10 = (00000000) 2 (-0) 10 = (10000000) 2 L addition binaire ne marche pas avec ce codage des négatifs : 3 + (-4) -1 Un autre codage des entiers négatifs doit être trouvé! 11 (2) 10 = (00000010) 2 (-2) 10 = (10000010) 2 00000011 + 10000100 10000111 ( = -7! )
1.2. Les nombres entiers négatifs Le complément à 2 : 1. On prend la valeur absolue x. 2. On représente x en base 2 sur n-1 bits. 3. On inverse chaque bit, c est le complément à 1. 4. On ajoute 1 (les dépassements au-delà de n bits sont ignorés). 5. La représentation de x en base 2 est 1 suivi de la suite obtenue. Cette opération correspond au calcul de 2 n - x. Exemple : codons -5 sur 8 bits. 1. x = 5 2. 000 0101 3. 111 1010 4. 111 1011 5. 1111 1011 Vérification : 12 0000 0101 + 1111 1011 = 1 0000 0000 (mais le 9 ème bit est éliminé!) donc égal 0.
1.3. Le code ASCII 13
1.3. Le code ASCII A chaque touche du clavier est associé un nombre. La norme ASCII (American Standard Code for Information Interchange) L ASCII est inventé en 1961 par Bob Bemer. L ASCII définit 128 caractères, numérotés de 0 à 127. Les caractères sont codés sur 7 bits (128 = 2 7 ). 14 Comme les ordinateurs travaillent sur 8 bits, le bit à gauche sera toujours un 0.
1.3. Le code ASCII Les caractères de numéro 0 à 31 et le 127 ne sont pas affichables. Le caractère 32 est l espace. Les autres caractères = chiffres arabes, lettres latines majuscules et minuscules, quelques symboles de ponctuation. D autres normes de codage ont repris l ASCII en utilisant le 8 ème bit (avec des caractères numérotés de 128 à 255). La norme ISO/CEI 8859 fournit des extensions pour diverses langues. Par exemple, l ISO 8859-1 (= Latin 1) permet de coder les caractères utiles en français ou en allemand (é, à, ü,...). Les différents codages sont sources d incompatibilités (é, È, ç,... s affichent mal). Afin d unifier les différents codages, la norme Unicode a été inventée. Les 128 premiers caractères d Unicode sont compatibles avec ASCII. 15
1.3. Le code ASCII Quelle logique pour le code ASCII? Le A possède le numéro 65 : A : 0100 0001 1 : 0000 0001 Le a ne diffère du A que d un bit : A : 0100 0001 a : 0110 0001 Différence entre une majuscule et la minuscule correspondante : 32 (en binaire : 0010 0000). 16 Wikipedia : Table ASCII
1.4. La représentation des nombres réels en base 2 En base 10, l expression 234,625 signifie : En base 2, l expression 110,111 signifie : 17 2 10 2 + 3 10 1 + 4 10 0 + 6 10 1 + 2 10 2 + 5 10 3 1 2 2 +1 2 1 + 0 2 0 + 1 2 1 + 1 2 2 + 1 2 3 On peut donc convertir facilement un nombre réel de la base 2 vers la base 10 : (110,111) 2 = 1 2 2 +1 2 1 + 0 2 0 + 1 2 1 + 1 2 2 + 1 2 3 = 4 + 2 + 0,5 + 0,25 + 0,125 = (6,875) 10 On remarque que la partie entière et la partie décimale sont indépendantes : (110) 2 = (6) 10 et (0,111) 2 = (0,875) 10.
1.4. La représentation des nombres réels en base 2 En revanche, le passage de base 10 en base 2 est plus sportif! Exemple : convertir (1234,5625) 10 en base 2. 1. On transforme la partie entière : (1234) 10 = (10011010010) 2 2. On transforme la partie décimale selon l idée suivante : 18 0,5625 1 1,125 1 2 3 n 3 +...+ a n 0,125 2 2 2 n 1 1 a 3 2 2 2 +...+ a n 0,25 3 2 n 2 3 +...+ a n = a n n 2 2 n 3 3 0 2 = a 4 1= a 4 n 3 2 a 4 = 1! 2 (0,5625) 10 = ( 0,1001 ) 2 (1234,5625) 10 = (10011010010,1001) 2 2 n 1 On soustrait 1 0 et on enlève a 12 3
1.4. La représentation des nombres réels en base 2 19 Maintenant qu on a compris la méthode, on peut simplifier la procédure : 0, 0,5625 2 1 1,125 2 0,125 0 0,25 2 0 0,5 2 1 1 0, 1 0 0 1
1.4. La représentation des nombres réels en base 2 Remarque : Un nombre à développement décimal fini en base 10 ne l est pas forcément en base 2. Exemple : transformez (0,15) 10 en base 2. 20 Résultat : (0,001001) 2
1.4.1. La norme IEEE-754 Un nombre réel n est pas limité à quelques chiffres après la virgule! Certains sont très petits ou très grands! G = 6,67259 10-11 N A = 6,022 10 23 Un nombre réel est écrit en notation scientifique : 21 + 6,67259 10-11 + 1,001001010 2-1011101 signe mantisse exposant signe mantisse exposant Forme d un nombre réel sur 32 bits : seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm 1 bit signe 8 bits exposant 23 bits mantisse
1.4.1. La norme IEEE-754 La norme IEEE-754 est le standard actuel. Il y a 3 formats : Sur 32 bits : 1 bit de signe, 8 bits d exposant (-127... 128), 23 bits de mantisse (type «single»). Sur 64 bits : 1 bit de signe, 11 bits d exposant (-1023... 1024), 52 bits de mantisse (type «double»). Sur 80 bits : 1 bit de signe, 15 bits d exposant (-16383... 16384), 64 bits de mantisse. Par la suite, on traitera que des cas en 32 bits pour simplifier. 22
1.4.1. La norme IEEE-754 seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm La mantisse est forcément une expression du type 1,... en base 2 : on l écrira 1 + m. Un nombre réel x s écrira donc sous la forme : s = 0 ou 1. e = entier signé. m compris dans l intervalle [0; 1[. 23 x = (-1) s 2 e (1 + m) avec e = E - 127
1.4.2. Recherche de s 24 s vaut 0 si x est positif. s vaut 1 si x est négatif.
Il y a 3 cas à envisager : 1.4.3. Recherche de e 1. Si x 2, on divise x par 2 autant de fois que nécessaire jusqu à obtenir un réel de l intervalle [1; 2[. e sera le nombre de divisions effectuées. 25 2. Si x < 1, on multiplie x par 2 autant de fois que nécessaire jusqu à obtenir un réel de l intervalle [1; 2[. e sera l opposé du nombre de multiplications effectuées. 3. Si 1 x < 2, alors e sera nul. e est codé sur 8 bits (de -127 à 128). Comme e peut être négatif, on ajoute 127 à l exposant pour obtenir un nombre compris entre 0 et 255. On a donc E = e + 127.
1.4.4. Recherche de m 26 Connaissant x, s et e, la valeur de m est facile à calculer : x = ( 1) s 2 e (1+ m) x = 2 e (1+ m) m = x 2 e 1
x = -9,6. 1. x est négatif : s = 1. 1.4.5. Exemples 2. On divise 9,6 par 2 jusqu à ce qu on obtienne un réel entre 1 et 2 : 9,6 2 = 4,8 4,8 2 = 2,4 2,4 2 = 1,2 On a divisé 3 fois par 2, donc e = 3. Et par conséquent E = 3 + 127 = 130 soit 1000 0010. 27 3. On calcule m : m = x 9,6 1= 1= 1,2 1= 0,2 e 3 2 2 m sera périodique en base 2 : (0,2) 10 = (0,0011) 2 Mais il faut l écrire sur 23 bits. On trouve : 0011 0011 0011 0011 0011 001 Résultat : 1 1000 0010 0011 0011 0011 0011 0011 001 s E m
x = 0,375. 1. x est positif : s = 0. 1.4.5. Exemples 28 2. On multiplie 0,375 par 2 jusqu à ce qu on obtienne un réel entre 1 et 2 : 0,375 2 = 0,75 0,75 2 = 1,5 On a multiplié 2 fois par 2, donc e = -2. Et par conséquent E = -2 + 127 = 125 soit 0111 1101. 3. On calcule m : m = x 0,375 1= 1= 1,5 1= 0,5 e 2 2 2 m sera en base 2 : (0,5) 10 = (0,1) 2 Mais il faut l écrire sur 23 bits. On trouve : 1000 0000 0000 0000 0000 000 Résultat : 0 0111 1101 1000 0000 0000 0000 0000 000 s E m
x = -1,05. 1. x est négatif : s = 1. 1.4.5. Exemples 2. 1,05 est dans l intervalle [1; 2[, donc e = 0. Et par conséquent E = 0 + 127 = 127 soit 0111 1111. 3. On calcule m : m = x 1,05 1= 1= 1,05 1= 0,05 e 2 2 0 m sera périodique en base 2 : (0,05) 10 = (0,000011) 2 29 Mais il faut l écrire sur 23 bits. On trouve : 0000 1100 1100 1100 1100 110 Résultat : 1 0111 1111 0000 1100 1100 1100 1100 110 s E m
1.5. Opérations en base 2 30 Addition : Les règles de l addition sont : 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Exemple : 13 + 7 = 20. 1101 + 111 10100 En additionnant de nombres de n bits, on peut avoir un débordement de capacité (overflow). Exemple : avec n = 8, effectuons 54 + 100 = 154. 0011 0110 + 0110 0100 1001 1010 Mais comme on travaille en complément à 2, ce nombre est interprété comme un nombre négatif : 1001 1010 = (-110 0101) 2 = (-102) 10
Multiplication : 1.5. Opérations en base 2 Les règles de la multiplication sont : 0 0 = 0 0 1 = 0 1 0 = 0 1 1 = 1 Exemple : 23 5 = 115. 10111 101 10111 00000- + 10111 - - 1110011 Le résultat est sur 7 bits, donc il est correct. 31 Mais on voit facilement qu un débordement de capacité (overflow) est aussi possible avec la multiplication.
Soustraction : 1.5. Opérations en base 2 Pour soustraire, on additionne le complément à 2. Exemple : 89 11 = 78. 0101 1001 + 1 1 11 0101 Complément à 2 de 0000 1011 1 0100 1 1 10 32 Le 9 ème bit est supprimé (par overflow). Il reste 0100 1110 qui correspond bien à 78.
Soustraction : Exemple : 42 51 = 9. 1.5. Opérations en base 2 0010 1010 + 1 100 1 101 Complément à 2 de 0011 0011 1 1 1 1 01 1 1 33 Nous trouvons un nombre négatif (le 1 er bit est 1). Pour trouver la valeur en base 10, il faut reprendre le complément à 2 de 1111 0111 : 0000 1001 qui correspond bien à 9. Donc 1111 0111 correspond à 9.
1.5. Opérations en base 2 34 Division : On utilise l algorithme habituel en soustrayant pas à pas. Exemple : 143 : 13 = 11. 1 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1
1.6. Exercices du chapitre 1 35