Logiciel de Base (A1-06/07) Léon Mugwaneza ESIL/Dépt. Informatique (bureau A118) mugwaneza@univmed.fr I. Représentation des nombres
Codage et représentation de l'information Information externe formats multiples et variés (nombres, textes, images, sons,...) Information interne (manipulée par l ordinateur) binaire : que des séquences 0 et de 1 (bits - BInary digits) grandeur physique manipulée : tension électrique (0V = 0, 1.5V = 1) mot binaire : séquence de bits (ex : 0010111 est un mots de 7 bits) quartet : mot binaire composé de 4 bits (ex: 0111) octet (byte en anglais) : mot binaire de 8 bits (ex : 1101 0110) mot de 32 bits (ex : 0110 1111 0001 1011 1000 0111 1110 1111) Nécessité d'unités d'échanges : conversion analogique/numérique ou numérique/analogique capteurs, carte d'acquisition, cartes de conversion 2
Représentation de l information Les séquences de bits peuvent représenter «beaucoup de choses!» MAIS n bits => 2 n valeurs différentes caractères? 26 lettres => 5 bits majuscules, minuscules + ponctuation ==> 7 bits (dans 8) ( ascii ) code standard pour couvrir toutes les langues du monde => 16 bits (unicode) valeurs logiques? 1bit : 0 FAUX, 1 VRAI nombres entiers, nombres réels? couleurs? adresses? instructions / commandes? 3
Représentation des nombres Nombres entiers naturels («entiers non signés») Nombres entiers relatifs («entiers signés») Nombres «réels» (les «nombres fractionnaires») 4
Nombres entiers naturels : base 10 Chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Exemple de nombres en base 10 32071 = (3x10 4 ) + (2x10 3 ) + (0x10 2 )+(7x10 1 ) + (1x10 0 ) 490 = (4x10 2 ) + (9x10 1 ) + (0x10 0 ) 5
Les entiers naturels : notation de position (1/2) Base B (B entier) => B symboles différents (chiffres) base 10 (décimal : 10 chiffres) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 base 2 ( binaire : 2 chiffres ) : 0, 1 base 16 (hexadécimal) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Représentation des nombres : notation de position c 31 c 30... c 2 c 1 c 0 nombre en base B à 32 chiffres valeur = c 31 x B 31 + c 30 x B 30 +... + c 2 x B 2 + c 1 x B 1 + c 0 x B 0 Binaire : 0,1 1011010 = 1x2 6 + 0x2 5 + 1x2 4 + 1x2 3 + 0x2 2 +1x2 1 + 0x2 0 B i est le poids de c i = 64 + 16 + 8 + 2 = 90 Notez qu un nombre binaire à 7 chiffres (1011010) est devenu un nombre décimal de 2 chiffres (90) 6
Les entiers naturels : notation de position (2/2) Taille bornée des entiers stockés Soit un entier M représenté sur n symboles dans une base B, on a M [0, B n -1] Exemples :» sur 3 chiffres décimales, on peut représenter les entiers [0, 999 ]» sur 3 bits en binaire, on peut représenter les entiers [0, 7]» sur 3 symboles en hexadécimal, on peut représenter les entiers [0, 4095] Extension : la base B, un entier représenté sur p symboles peut être étendu en un entier sur n>p symboles en introduisant des 0 sur les symboles de rang p à n-1 exemple :» l extension de 011 b sur 5 bits donne 00011 b 7
Conversion 2 10, 16 10 la base B, un nombre M représenté sur n bits par c n-1 c n-2... c 2 c 1 c 0 a la valeur : Exemples : M n = 1 i= 0 c B i i 010100 b = 0*2 0 +0*2 1 +1*2 2 +0*2 3 +1*2 4 +0*2 5 = 4 + 16 = 20 d 1111 b = 1*2 0 +1*2 1 +1*2 2 +1*2 3 = 1+2+4+8 = 15 d 012 h = 2*16 0 +1*16 1 +0*16 2 = 2+16 = 18 d 1AE h = 14*16 0 +10*16 1 +1*16 2 = 14+160+256=430 d 8
Conversion 10 2 Comment à partir de M retrouver les c i? Divisions successives jusqu à l obtention d un quotient nul attention : lecture du résultat du bas vers le haut Tableau des puissances de 2 parcourir le tableau des 2 i de gauche à droite» Si M 2 i, alors mettre 1 dans case 2 i et M=M-2 i» Sinon mettre 0 dans case 2 i continuer jusqu à 2 0 Exemple : 6 d =110 b M n = 1 c i i= 0 2 i 6 2 0 3 2 1 1 2 1 0 2 3 2 2 2 1 2 0 0 1 1 0 9
Bonus Conversion 10 16 M Idem base 2 Divisions successives jusqu à l obtention d un quotient nul lecture des restes du bas vers le haut Tableau de puissance de 16 parcourir le tableau des 16 i de gauche à droite» Soit c= M / 16 i, mettre c dans case 16 i et M=M-c*16 i continuer jusqu à 16 0 n = 1 i= 0 c i 16 i 687 16 F 42 16 A 2 16 2 0 Exemple : 687 d =2AF h 16 3 16 2 16 1 16 0 0 2 A F 10
Conversion 2 16, 16 2 2 16 : séparer le nombre binaire en quartets (de droite à gauche) convertir chaque quartet en hexadécimal Exemple : 11011110001010000 b séparation en quartet : 1 1011 1100 0101 0000 conversion : 1 1011 1100 0101 0000 b = 1 B C 5 0 h 16 2 : conversion de chaque symbole en un quartet binaire Exemple : AF23 h en quartets : A h =1010 b, F h =1111 b, 2 h =0010 b, 3 h =0011 b conversion : AF23 h = 1010 1111 0010 0011 b 11
Opérations sur les entiers naturels Addition et soustraction sur entiers naturels décimaux 1 7 5 + 1 7 9 2 7 1 5-1 1 7 5 8 Remarque : la soustraction n est pas définie si le nombre à soustraire est plus grand que le nombre auquel on le soustrait 12
Addition d entiers naturels en base 2 Règles : 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 => je pose 0 et je retiens 1 1 + 1 + 1 = 11 => je pose 1 et je retiens 1 retenue (carry en anglais) M entier représenté sur n bits (M [0, 2 n -1]) Lorsque la somme de 2 entiers naturels codés sur n bits n est pas représentable sur n bits, on dit qu il y a dépassement de capacité (overfow) sur entiers naturels 13
Addition en base 2 : exemples En binaire sur 4 bits 0 1 0 0 + 0 0 1 1 0 1 1 1 1 1 1 0 0 + 1 1 1 0 1 1 0 1 0 1 0 1 1 1 0 + 0 0 1 1 1 0 0 1 dépassement de capacité sur entiers naturels 14
Bonus Addition en base 16 : exemple En hexadécimal sur 16 bits 0 D 2 4 + 5 2 9 2 5 F B 6 1 1 F A 8 + 7 3 4 2 9 2 E A 5 1 6 5 3 + C 2 E 5 1 1 9 3 8 dépassement de capacité sur entiers naturels 15
Bonus Circuit additionneur additionneur 1 bit a i b i r_out i + r_in i s i Table de vérité a i b i r_in i s i r_out i 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Additionneur 4 bits : s 3 s 2 s 1 s 0 = a 3 a 2 a 1 a 0 + b 3 b 2 b 1 b 0 a 3 b 3 a 2 b 2 a 1 b 1 r_out 3 + + + a 0 b 0 r_in0 = 0 + s 3 s 2 s 1 s 0 overflow si r_out 3 = 1 (cas des entiers naturels) 16
Règles : Soustraction en base 2 0-0 = 0 1-0 = 1 1-1 = 0 0-1 => je prête une «deuzaine» à 0 qui devient 10, sans oublier de retrancher la «deuzaine» au nombre de gauche, puis je pose 1 Lorsque le nombre à soustraire est plus grand que le nombre auquel on le soustrait, on obtient un dépassement de capacité sur entiers naturels 17
Soustraction en base 2 : exemples En binaire sur 4 bits 0 1 1 1 1 0-0 1 0 1 1 1 0 0 1 1 1 1 1 1 1 0 0-1 1 1 1 1 0 1 1 1 0 1 1 0 1 0-1 0 1 0 0 0 1 1 0 dépassement de capacité sur entiers naturels 18
Bonus Soustraction en base 16 : exemples En hexadécimal sur 16 bits C 6 5 1 3-1 2 1 4 5 B 4 0 E 1 1 F A 8-1 7 2 4 2 A D 6 6 5 C E 7-3 1 4 2 2 B A 5 dépassement de capacité sur entiers naturels 19
Bonus Exemples : addition d entiers naturels En binaire sur 4 bits : 0101+1010= 0101+0101= 1010+0110= 1100+1001= En hexadécimal sur 16 bits : AB82+1532= 1234+5684= 7F13+2305= 2531+E4CD= 20
Entiers relatifs Comment représenter les nombres négatifs? Représentation quotidienne (signe : 1 bit, valeur absolue : un entier naturel sur les bits restants) signe et valeur absolue (sign and magnitude) -3 inadaptée car : - 2 zéros!! + 0 et -0 - opérations «difficiles» signe valeur absolue scomment réaliser les opérations (comme l addition, la soustraction, et la multiplication) sur les entier relatifs représentés en «signe+valeur absolue»? 21
Représentation binaire «complément à 1» La représentation de l opposé M d un nombre M est obtenue à partir de la représentation de M en complémentant chaque bit (opération ~ du langage C) Exemple: 7 10 = 00111 2-7 10 = 00111 2 = 11000 2 Note : les nombres positifs commencent par 0, les nombres négatifs commencent par 1 00000 00001... 01111 10000... 11110 11111 Que représente -00000? Combien de nombres positifs peut-on représenter sur n bits? Combien de nombres négatifs? sopérations sur les entiers relatifs représentés en binaire complément à 1? 22
Représentation binaire «complément à 2» (1/3) En binaire complément à 2 (que des fois nous abrégerons par C 2 ), un nombre M représenté sur n bits par c n-1 c n-2... c 2 c 1 c (où c 0 i =0, ou c i =1) a la valeur: M n 2 i= 0 = c 2 n 1 + c 2 n 1 i M est positif ou nul si c n-1 = 0 M est négatif si c n-1 = 1 c n-1 indique le signe (mais est plus qu un bit de signe) Exemples sur 3 bits 000 b = 0 d 010 b = 2 d 100 b = -2 2 = -4 d i 101 b = -2 2 +1 = -3 d 23
Représentation binaire «complément à 2» (2/3) Taille bornée des nombres stockés : la représentation en complément à 2 sur n bits permet de représenter les nombres sur l intervalle : [-2 n-1,2 n-1-1] un nombre négatif «en plus»! [ ] -2 n-1 0 2 n-1-1 son opposé n est pas représentable sur n bits Exemples : Sur 3 bits, on peut représenter les nombres compris entre -4 et 3 Sur 4 bits, on peut représenter les nombres compris entre -8 et 7 24
25 Représentation binaire «complément à 2» (3/3) Opposé d un entier relatif l opposé de X noté op_x est tel que X+op_X =0 soit X sur n bits, on a donc 1 2 2 1 1 1 1 2 0 1 0 2 1 0 2 1 = + = = + = = = n i i n i n n i n n X X a a a a X a a a a X L L L L L L _ +1 = X X op
Complément à 2 : exemples En binaire complément à 2 sur 3 bits : X = 000 b, X = 111 b, op_x = 000 b X = 001 b, X = 110 b, op_x = 111 b X = 010 b, X =, op_x = X = 011 b, X =, op_x = X = 101 b, X =, op_x = X = 111 b, X =, op_x = En utilisant une notation «hexadécimal» sur 8 bits : X = 3B h, X = C4 h, op_x = C5 h X = 8F h, X =, op_x = X = 66 h, X =, op_x = nombre en complément à 2 (chaque quartet est remplacé par le chiffre hexadécimale correspondant) 26
Complément à 2 : une astuce pour calculer l opposé Une technique souvent utilisée pour calculer l opposé d un entier relatif : recopier de tous les bits de droite vers la gauche jusqu au premier 1 inclus «complémenter» tous les autres bits Exemples en binaire sur 3 bits : X = 000 b, op_x = 000 b X = 001 b, op_x = 111 b X = 010 b, op_x = X = 011 b, op_x = X = 101 b, op_x = X = 111 b, op_x = Pourquoi ça marche? (exercice) 27
Complément à 2 : extension Extension : un nombre représenté sur p bits peut être représenté sur n>p bits en introduisant la valeur du bit de rang p-1 sur les bits de rang p à n-1 Exemples : nombres représentés sur 4 bits N 1 = 0110 b. Son extension sur 8 bits donne N 1 = 0000 0110 b N 2 = 0001 b. Son extension sur 8 bits donne N 2 = 0000 0001 b N 3 = 1001 b. Son extension sur 8 bits donne N 3 = 1111 1001 b N 4 = 1101 b. Son extension sur 8 bits donne N 4 = 1111 1101 b N 5 = 7 h. Son extension sur 8 bits donne N 5 = 07 h N 6 = A h. Son extension sur 8 bits donne N 6 = FA h Pourquoi ça marche? (exercice) 28
Complément à 2 : addition Méthode identique à celle utilisée pour les entiers naturels (sauf pour le débordement de capacité) Exemples en binaire sur 4 bits : 4 d +3 d = 0100 + 0011 = 0111 = 7 7 h +2 h = -2 d +-5 d = 8 h +A h = -4+(-8) = 29
Complément à 2 : soustraction Pour effectuer la soustraction entre deux entiers relatifs, on calcule l opposé du nombre à soustraire et on effectue l addition avec l opposé Exemples en binaire sur 4 bits : 7 d -3 d = 0111 0011 = 0111 + 1101 = 0100 = 4 6 h -4 h = 2 d -5 d = -2-(-5) = -4-(-8) = 30
Addition en binaire «complément à 2» : dépassement de capacité (1/2) Il y a dépassement de capacité sur entiers relatifs lorsque la somme de deux entiers de même signe donne un entier de signe différent on obtient un résultat que l on ne peut pas représenter (car valeur absolue trop grande) Exemples en binaire sur 4 bits : 7 d +2 d = 0111 + 0010 = 1001 = -7! -5 d +(-4 d )= 5 d -(-4 d )= 31
Addition en binaire «complément à 2» : dépassement de capacité (2/2) cas positif cas négatif r_out n-2 r_out n-1 1 0 a n-2 a n-3 a 0 0 b n-2 b n-3... b 0 --------------------- 1 s n-2 s n-3... s 0 1 a n-2 a n-3 a 0 1 b n-2 b n-3... b 0 --------------------- 1 0 s n-2 s n-3... s 0 Détection du dépassement de capacité sur entiers relatifs : r_out n-1 = r_out n-2? débordement de capacité ssi les deux dernières retenues sortantes (r_out n-1 = r_out n-2 ) sont différentes? démonstration? (exercice) 32
Bonus Exemples : opérations en binaire C 2 En binaire sur 4 bits : 0101+1010= 0101+0101= 1010+0110= 1100+1001= 1100+1001= En notation hexadécimal sur 16 bits : AB82+1532= 1234+5684= 7F13+2305= 2531+E4CD= 2531-E4CD= 33
Les nombres «réels» représentation à virgule fixe une partie entière une partie fractionnaire représentation à virgule flottante (norme IEEE 754) 34
Virgule fixe : passage base 10 base 2 division successives du nombre par 2 pour la partie entière Bit poids faible 20 2 0 10 2 0 5 2 1 2 2 0 1 2 1 0 Bit poids fort 20 10 = 10100 2 multiplications successives du nombre par 2 pour la partie fractionnaire 0,375 * 2 = 0, 75 0,75 * 2 = 1, 5 0,5 * 2 = 1 0,375 10 = 0.011 2 20,375 10 = 10100,011 2 Remarques la représentation en base 2 n'est pas forcément finie (exemple 0,210) limitation du nombre de bits => il faut arrondir 35
Représentation en virgule flottante Un nombre est représenté en virgule flottante dans la base B s il est mis sous la forme : ±M1,M2 B c où M1,M2 est appelé la mantisse du nombre, c est la caractéristique ou exposant Un nombre a plusieurs représentation en virgule flottante : +59,4151x10-5 = +0,0594151x10-2 = +59 4151x10-9 Un nombre représenté en virgule flottante est normalisé s il est sous la forme ±0,M B c où M est un nombre dont le premier chiffre est non nul En binaire M commence donc toujours par 1 Exemples : +59,4151x10-5 et +0,0594151x10-2 +0,594151x10-3 -10,1001x2 3 et -0,0101001x2 6-0,101010x2 5 36
«Nombres flottants» : norme IEEE 754 Format simple précision Nombre à représenter : (-1) s M 2 c (voir cas particuliers plus loin) 0 + 1 - puissance de 2 + 127 10 s c M en base 2 1 8 23 bits 32 bits M est mis sous la forme 1,M où M est un nombre binaire quelconque sur 23 bits on parle de pseudo mantisse le 1 précédant la virgule n est pas codé en machine et est appelé bit caché s est le signe du nombre (0 pour +, 1 pour -) c est la représentation de l exposant c en biaisé excès 127 ( c est translaté de 127 10 pour représenter l intervalle [-127,+128] par l intervalle [0, 255]) Utilisé pour représenter le type float de C 37
IEEE 754 simple précision : Représentation de l exposant Représentation binaire biaisé excès 127 : exposant (c) valeur stockée (c ) -127 00000000-126 00000001... 0 01111111 +1 10000000... i... (i+127) 2 +128 11111111 38
Norme IEEE 754 : exemple Représentons le nombre -10,125 10 au format IEEE 754 simple précision 1. 10,125 10 = 1010,001 2 = 1,010001 2 x 2 3 2. l exposant c=3 est translaté de la valeur 127 c = 130 10 = 10000010 2 3. le signe du nombre est négatif, donc s vaut 1 1 10000010 01000100000000000000000 signe (1bit) exposant en excès 127 (8bits) mantisse (23bits) + un bit caché à 1 39
Norme IEEE 754 : cas particuliers Nombres «dénormalisés» : l exposant c = 0 (c=-127) est réservé pour représenter 0 et les petits nombres. le 0 est représenté par : c =0 et M =0 et pas de bit caché à 1 0 00000000 00000000000000000000000 Représentation pour très petits nombres : c = 0, M 0 (nombre représenté : 0,M 2-126 ) L infini (- et + ) et les erreurs : c = 255 10 (c= +128) Infini : c =255 10 et M =0 ( S=0 +, s=1 - ) s 11111111 00000000000000000000000 Erreurs (NaN : Not a Number) : c =255 10, M 0 et s quelconque s 11111111 M 0 s En langage C, pourquoi y a-t-il un peu moins de nombres de type float que de nombres de type int? 40
Norme IEEE754 : précision 24 bits de mantisse sont équivalents à un peu plus de 7 chiffres décimaux! log 24 10 Si on veut représenter π: 3,1415926535897932384626433832795... on ne peut que le représenter par : 3,141592 (en tronquant) 3,141593 (en arrondissant) 2 7,2 41
Dépassement de capacité (overflow) Comme pour les entiers, possibilité de dépassement de capacité 1,111111 2 127 + 1,111111 2 127 11,111110 2 127 1,1111110 2 128 + 42
Dépassement de capacité (underflow) Les nombres peuvent aussi être trop petits: 0,100000 2-126 1,000000 2 26 1.0 2-151 0, 000000000000000000000001 2-127 0 43
Addition de nombres en virgule flottante En 5 étapes : 1. Ramener les 2 nombres au même exposant («dénormaliser») 2. Additionner les mantisses 3. Ajuster la mantisse (et l exposant) pour avoir un bit avant la virgule («renormaliser») 4. Arrondir ou tronquer à la précision requise 5. Vérifier qu il n y a pas dépassement de capacité 44
Précision des nombres flottants : IEEE 754 Les différents formats : signe exposant biaisé mantisse simple précision» sur 32 bits» 1 bit de signe» exposant sur 8 bits (biaisé excès 127)» mantisse sur 23 bits+ 1 bit caché» cas général : de 1,17 10-38 à 3,40 10 38» nombres dénormalsés : jusqu à 1,40 10-45 double précision» sur 64 bits» 1 bit de signe» exposant sur 11 bits (biaisé excès 1023)» mantisse sur 52 bits+1bit caché» cas général : de 2,2 10-308 à 1,8 10 308» nombres dénormalisés : jusqu à 5 10-324 utilisé pour le type double de C précision étendu» sur 80 bits» exposant sur 15 bits,» mantisse sur 63 bits 45
Bonus Code ASCII (voir www.lookuptables.com pour d autres codes) 46