1- reprÉsentation de...

37
1- REPRÉSENTATION DE L’INFORMATION Techniques de Programmation L.Cuvillon, P. Graebling

Upload: nguyendung

Post on 16-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

1- REPRÉSENTATION DE L’INFORMATION Techniques de Programmation L.Cuvillon, P. Graebling

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

3

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)

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

–  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

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

7

Principe identique pour toutes les bases

Système décimal Un nombre entier est représenté de façon unique par une

expression de la forme : N = an.pn + an-1.pn-1 + ... + a0.p0 (0 < ai < p -1) *  p : base *  a i : digits *  notation : an an-1...a0

8

chiffre de poids le plus fort (MSD: most significant digit)

chiffre de poids le plus faible (LSD: lest significant digit)

Système binaire Calculateurs à 2 états d’équilibre

Utilisation de 2 digits : 0 et 1 (bits = binary digits)

9

Exemple : 10010101 (2)

10010101 (2) = 1.2 7 + 1.2 4 + 1.2 2 + 1.2 0

= 128 + 16 + 4 + 1 = 149 (10)

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)

11

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)

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    

12

Les bases utilisées sont des puissances de deux

Conversion avec système binaire immédiate

Exemple :

2AC (16) = 2.16 2 + 10.16 1 + 12.16 0

= 512 + 160 + 12 = 684 (10)

Systèmes octal et hexadécimal

•  FF (16) = (10)

• 57(16) + 1 = (16)= (10)

• 59(16) + 1 = (16)= (10)

• 9F(16) + 1 = (16) = (10)

• 71 (8) = (10)

• 57(8) + 1 = (8) = (10)

13

EXERCICE

255

58 88

A0 160

5A 90

57

60 48

Systèmes octal et hexadécimal

• AE(16) + 5 = (16) = (10)

• 35(8) + 3 = (8) = (10)

14

EXERCICE 2

B3 179 40 32

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.81+ 5.8 0 = 128 + 16 + 5 = 149 (10)

•  95 (16) = 9.16 1 + 5.16 0 = 144 + 5 = 149 (10)

15

Changements de base Base 10 Base p : divisions successives

16

48 2 24 2 0

12 2 0 6 2 0

3 2 0 1 2 1

0 1

48 (10) = 110000 (2)

Changements de base Base 10 Base p : divisions successives

17

135 8 16 8 7

2 8 0 0 2

135 (10) = 207 (8)

3115 16 194 16 11

12 16 2

0 12

3115 (10) = C2B (16)

Changements de base Base 2 Base 8 Base 16

simples si les bases sont des puissances de deux

18

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

•  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 %(2n)

Octets - Mots

19

•  1 KB= 1Ko = 210 octets = 1024 octets •  1 MB= 1Mo = 1024 Ko = 220 octets = 1 048 576 octets •  1 GB= 1 Go = 230 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 = 109 octets (=0.93 * 230 octets) Ø introduction de notations peu usitées pour différencier

•  KiB (Kio)= 1 kibi octet = 210 octets pour faire la différence •  1 MiB = 1 mebi octet = 220 octets

Octets - Mots

20

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

21

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.

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)

1110 (2) = -2 (10) (= 1101 (2)+1)

•  Note: le MSD donne encore le signe du nombre.

23

Nombres négatifs (binaire 4 bits: 16 valeurs)

24

Décimal

+7 +2 +1 +0 -0 -1 -7 -8

Bit de signe

0111 0010 0001 0000 1000 1001 1111

Complément à 1

0111 0010 0001 0000 1111 1110 1000

Complément à 2

0111 0010 0001

0000

1111 1001 1000

•  0 unique en complément à 2 (bit en dépassement tronqué): -0 è 1111(2) +1 = 10000(2)= 0000 (2)

L’exception du plus petit élément: -8 est son propre complément à 2

Nombres négatifs (binaire)

25

xkcd.com

Nombres négatifs Exemple  :    63  -­‐  28  =  35  

   

 

26

00111111 + 11100100 1 00100011

complément à 2 (bit en dépassement tronqué)

63 00111111 - 28 + 11100011 35 1 00100010

1 00100011

complément à 1 (bit en dépassement à rajouter à l’addition ! )

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.

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

28

Nombres réels • Représentation normalisée partie entière • Décalage de l’exposant signe de l’exposant • Norme IEEE 754 (simple précision)

•  nombre= (bit de signe) 1.mantisse * 2 exposant-127

• Exemple : -2.5 = - 1.25 * 21 mantisse = .25(10) = 2-2 =.01(2)

29

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

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) :

30

space 32 # 35 ? 63 car. return 13 ... ... ... ...

A 65 a 97 0 48 B 66 b 98 1 49

caractère code caractère code caractère code

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,

31

… … …

ç 251 ê 234 ÷ 247 Ã 195 µ 181 © 169

caractère code caractère code caractère code

Codage de l’information

Quelle est la signification de la suite d’octets suivante ?

4A 4F 55 52

32

Codage de l’information Quelle est la signification de la suite d’octets suivante ?

4A 4F 55 52

33

•  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

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.

34

Le fourCC • Un code de 4 caractères : 4 octets indiquant la méthode de

compression utilisée pour la vidéo (Codec: compression-dé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