1- REPRÉSENTATION DE L INFORMATION Techniques de Programmation L.Cuvillon, P. Graebling
3 Représentation des nombres Pendant de nombreux siècles, on a cherché la meilleure façon de représenter les nombres et les grandeurs. Peuples primitifs : alignement de bâtonnets Invention du zéro autorise un système de numération souple
4 Système décimal Base du système de numération usuel est 10 10 doigts = auxiliaire de calcul Système décimal autorise la conception de machines à calculer mécaniques (Pascaline en 1645, Babbage & Ada Lovelace 1822)
6 Système décimal Base du système de numération usuel est 10 10 doigts = auxiliaire de calcul Système décimal autorise la conception de machines à calculer mécaniques (Pascaline en 1645, Babbage & Ada Lovelace 1822) Existence de systèmes physiques à 2 états d équilibre (circuits électroniques (mémoires)) impose l utilisation de systèmes de numération différents : binaire
7 Système décimal (puissance de 10) Exemple : 1248 (10) 1248 = 1000 + 200 + 40 + 8 = 1.10 3 + 2.10 2 + 4.10 1 + 8.10 0 digits utilisés : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Principe identique pour toutes les bases
8 Système décimal Un nombre entier est représenté de façon unique par une expression de la forme : N = a n.p n + a n-1.p n-1 +... + a 0.p 0 (0 < a i < p -1) * p : base * a i : digits * notation : a n a n-1...a 0 chiffre de poids le plus fort (MSD: most significant digit) chiffre de poids le plus faible (LSD: lest significant digit)
9 Système binaire Calculateurs à 2 états d équilibre Utilisation de 2 digits : 0 et 1 (bits = binary digits) Exemple : 10010101 (2) 10010101 (2) = 1.2 7 + 1.2 4 + 1.2 2 + 1.2 0 = 128 + 16 + 4 + 1 = 149 (10)
11 Systèmes octal et hexadécimal Longueur des nombres en binaire et la confusion qui en résulte utilisation de bases plus pratiques Système octal (base 8) Système hexadécimal (base 16) Exemples : 225 (8) = 2.8 2 + 2.8 1 + 5.8 0 = 128 + 16 + 5 = 149 (10) 95 (16) = 9.16 1 + 5.16 0 = 144 + 5 = 149 (10)
12 Systèmes octal et hexadécimal Digits en base 8 : 0, 1, 2, 3, 4, 5, 6, 7 Digits en base 16 : 0, 1, 2,... 8, 9, A, B, C, D, E, F Exemple : 2AC (16) = 2.16 2 + 10.16 1 + 12.16 0 = 512 + 160 + 12 = 684 (10) Les bases utilisées sont des puissances de deux Conversion avec système binaire immédiate
13 Systèmes octal et hexadécimal EXERCICE FF (16) = 255 (10) 58 88 57 (16) + 1 = (16) = (10) 57 71 (8) = (10) 60 48 57 (8) + 1 = (8) = (10) 5A 90 59 (16) + 1 = (16) = (10) A0 160 9F (16) + 1 = (16) = (10)
14 Systèmes octal et hexadécimal EXERCICE 2 B3 179 40 32 AE (16) + 5 = (16) = (10) 35 (8) + 3 = (8) = (10)
15 Changements de base Base p Base 10 : trivial 10010101 (2) = 1.2 7 + 1.2 4 + 1.2 2 + 1.2 0 = 128 + 16 + 4 + 1 = 149 (10) 225 (8) = 2.8 2 + 2.8 1 + 5.8 0 = 128 + 16 + 5 = 149 (10) 95 (16) = 9.16 1 + 5.16 0 = 144 + 5 = 149 (10)
16 Changements de base Base 10 Base p : divisions successives 48 2 0 24 2 0 12 2 0 6 2 48 (10) = 110000 (2) 0 3 2 1 1 2 1 0
17 Changements de base Base 10 Base p : divisions successives 135 8 7 16 8 0 2 8 2 0 3115 16 11 194 16 2 12 16 12 0 135 (10) = 207 (8) 3115 (10) = C2B (16)
18 Changements de base Base 2 Base 8 Base 16 simples si les bases sont des puissances de deux base 8 = base 2 3 1 0 0 1 0 1 0 1 2 2 5 base 16 = base 2 4 1 0 0 1 0 1 0 1 9 5
19 Octets - Mots 1 octet (byte en anglais) = 8 bits Systèmes informatiques travaillent sur des mots de longueur fixe (8, 16, 32 ou 64) De manière générale : Nombre d octets valeurs décimales 1 octet 0 à 255 ou -128 à +127 (256 codes!) 2 octets 0 à 65535 ou -32768 à +32767 4 octets 0 à 4 294 967 295 ou... Possibilité d une dépassement d entier (integer overflow): si mot trop petit pour stocker le résultat de l opération Ø En général: conservation des LSD bits, équivaut à modulo %(2 n )
20 Octets - Mots 1 KB= 1Ko = 2 10 octets = 1024 octets 1 MB= 1Mo = 1024 Ko = 2 20 octets = 1 048 576 octets 1 GB= 1 Go = 2 30 octets La convention des programmeurs, des systèmes d exploitations, des mémoires (RAM,Flash) Or les fabricants de disques durs (!) et la norme SI: 1 kb= 1ko = 1000 octets 1 GB= 1Go = 10 9 octets (=0.93 * 2 30 octets) Ø introduction de notations peu usitées pour différencier KiB (Kio)= 1 kibi octet = 2 10 octets pour faire la différence 1 MiB = 1 mebi octet = 2 20 octets
21 Nombres négatifs (binaire) (Illustrés ici pour l exemple sur des mots de 4 bits, mais valable pour n bits) Solution immédiate : le MSD pour le 1 bit de signe 0 positif 1 négatif ainsi 0010 (2) = 2 (10) 1010 (2) = -2 (10) Problème : l addition binaire de ces 2 nombres ne donne pas le bon résultat (=1100 (2) = - 4 (10) ) impose un traitement du signe et des circuits différents pour l addition et la soustraction Solution: forme complémentée
22 Nombres négatifs (binaire) : complément à 1 et 2 Le complément à 1: le nombre opposé est obtenu en inversant chaque bit du nombre (0 è 1 et vice versa) ainsi 0010 (2) = 2 (10) 1101 (2) = -2 (10) Le complément à 2 : le complément à 1 auquel on ajoute 1 ainsi 0010 (2) = 2 (10) 1100 (2) = -2 (10) (= 1101 (2) +1) Note: le MSD donne encore le signe du nombre.
23 Nombres négatifs (binaire) : complément à 1 et 2 Le complément à 1: le nombre opposé est obtenu en inversant chaque bit du nombre (0 è 1 et vice versa) ainsi 0010 (2) = 2 (10) 1101 (2) = -2 (10) Le complément à 2 : le complément à 1 auquel on ajoute 1 ainsi 0010 (2) = 2 (10) 1110 (2) = -2 (10) (= 1101 (2) +1) Note: le MSD donne encore le signe du nombre.
24 Nombres négatifs (binaire 4 bits: 16 valeurs) Décimal Bit de signe Complément à 1 Complément à 2 +7 0111 0111 0111 +2 +1 0010 0001 0010 0001 0010 0001 +0-0 -1-7 -8 0000 1000 1001 1111 0000 1111 1110 1000 0000 1111 1001 1000 L exception du plus petit élément: -8 est son propre complément à 2 0 unique en complément à 2 (bit en dépassement tronqué): -0 è 1111 (2) +1 = 10000 (2) = 0000 (2)
25 Nombres négatifs (binaire) xkcd.com
26 Nombres négatifs Exemple : 63-28 = 35 63 00111111-28 + 11100011 35 1 00100010 1 00111111 + 11100100 1 00100011 00100011 complément à 1 (bit en dépassement à rajouter à l addition! ) complément à 2 (bit en dépassement tronqué)
Nombres négatifs : Exercice Calculer le représentation binaire, puis hexadécimale de 13 et -5 avec la convention du complément à 2; l utilisation de mots de 1 octet. Calculer alors par une addition binaire la somme des 2 nombres.
28 Nombres réels Virgule flottante : 12E8 = 12 x 10 8 Représentation non unique - 12.34 = - 1234 x 10-2 = - 0.001234 x 10 +4 = - 0.1234 x 10 +2 Codage signe du nombre partie entière partie décimale (la mantisse) signe de l exposant exposant
29 Nombres réels Représentation normalisée Décalage de l exposant partie entière signe de l exposant Norme IEEE 754 (simple précision) nombre= (bit de signe) 1.mantisse * 2 exposant-127 Exemple : -2.5 = - 1.25 * 2 1 mantisse =.25 (10) = 2-2 =.01 (2) 31 30 23 22 0-128 (10).25 (10) signe exposant décalé mantisse 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
30 Représentation des caractères Systèmes électroniques avec autant d états stables que de caractères : IMPOSSIBLE Systèmes à 2 états stables codage binaire 128 symboles suffisent : A-Z, a-z, 0-9, + symbole mise en forme 7bits Code ASCII (ici, représentation décimale du code) : caractère code caractère code caractère code A 65 a 97 0 48 B 66 b 98 1 49 space 32 # 35? 63 car. return 13............
31 Représentation des caractères Or le mot de base est l octet è 128 symboles encore libres Création de jeux de caractères ou tables ascii étendues pour les codes > 127 (10) En particulier: le jeu de caractères latins, caractère code caractère code caractère code ç 251 ê 234 247 Ã 195 µ 181 169
32 Codage de l information Quelle est la signification de la suite d octets suivante? 4A 4F 55 52
33 Codage de l information Quelle est la signification de la suite d octets suivante? 4A 4F 55 52 Une suite de 4 entiers positifs Une suite de 4 entiers relatifs (complément à 2) Une suite de 2 entiers de 16 bits Une chaine de caractère : «JOUR» en ASCII Une nombre à virgule flottante, nombre réel sur 32 bits Qui codent: Des données (texte, nombres) Des niveaux de gris dans une image Des amplitudes sonores
34 Codage de l information Intérêt de connaître le codage de l information (alors que le langage de programmation va nous fournir une abstraction): Debugger, trouver l erreur Hacker/modifier des données ou un programme lui-même Exemples: Chercher et Modifier la valeur du compteur du nombre de vies dans la sauvegarde d un jeu (mais c est souvent crypté de nos jours) Modifier le code indiquant le codec vidéo utilisé dans un fichier AVI pour que celui-ci soit correctement reconnu par les lecteurs vidéos Corriger la fréquence d un fichier mp3 incorrectement créé ou corrompu.
Le fourcc Un code de 4 caractères : 4 octets indiquant la méthode de compression utilisée pour la vidéo (Codec: compressiondécompression) au début du fichier Entre autre: DX50, DIVX [44 49 56 58]: divx FMP4 [46 4D 50 34]:alternative au format divx créé par ffmpeg (codecs libre) H264 SVQ3: H264 variante pour Quick Time by Sorenson Note: avi, mkv, mpg, mov sont des formats pour contenir la vidéo et indépendant du codec utilisé
MP3 entête Contient le bitrate et la fréquence d echantillonage Encodé avec un logiciel buggé Le fichier est à 41 KHz et 128 kbit/s Or l entête du fichier indique 48KHZ et 128 bits/s