CHAPITRE 1 CODIFICATION ET REPRESENTATION DES NOMBRES INTRODUCTION : La codification consiste à établir une correspondance entre la représentation externe de l'information dont nous sommes utilisateurs et sa représentation interne dans la machine, qui est une suite de bits (suite de 0 et 1). Le système de numération décimale (ou système décimal) est familier à chacun de nous, il revêt de l’importance en raison de son utilisation universelle pour représenter les grandeurs du monde courant. De ce fait, il faudra parfois convertir des valeurs décimales en valeurs binaires avant de pouvoir les traiter dans un circuit numérique. Une même information peut se coder de plusieurs façons en fonction de son utilisation, par exemple la forme d’un nombre change selon qu’il entre dans un bloc de calcul, qu’il apparaît sur un circuit d’affichage lumineux, sur un écran de visualisation, sur une imprimante etc… Les nombres binaires (de base 2) sont utilisés de manière extensive dans les circuits numériques, de même que les nombres des systèmes octal (base 8) et hexadécimal (base 16). I. Définition Un Système de numération : C’est un ensemble de symboles assemblés selon des règles précises, permettent d’écrire de lire et de nommer des nombres, exemple : dans le système décimal existent 10 symboles qui sont : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Une base : elle correspond au nombre de symboles utilisés dans un système de numération, où chaque chiffre a une valeur de position. II. Représentation des nombres entiers Soit NB un entier naturel non nul quelconque et B un entier naturel strictement supérieur à 1, on admet que l’on peut décomposer le nombre NB de façon unique : 𝑁 = 𝑎 𝐵 = 𝑎 .𝐵 + 𝑎 .𝐵 + 𝑎 .𝐵 + ⋯………𝑎 .𝐵 Où les a0, a1,………………. an-1 sont strictement inférieurs à B et an-1 est non nul. Cette décomposition est appelée décomposition du nombre NB dans la base B. Dans le système décimal B=10 les symboles sont : 0, 1, 2, 3 ,4, 5, 6, 7, 8, 9. Mme F.DJIDEL Page 1 𝑁 = 𝑎 10 Exemple : (745)10 = 5+40+700 = 5.100+ 4.101+7.102 L’écriture (745) est appelée forme implicite alors que l’écriture 5.100+ 4.101+7.102 s’appelle forme explicite ou forme polynomiale. III. Chaque chiffre du nombre est à multiplier par une puissance de 10 c’est ce que l’on nomme le poids du chiffre. Cette manière d’écrire les nombres est appelée système de numération de position : (12435)10 =1.104 +2. 103+4. 102 +3. 101 +5. 100 Le chiffre 1 est appelé le poids fort, le chiffre 5 est appelé le poids faible. Dans le système octal B=8, les symboles sont : 0, 1, 2, 3, 4, 5, 6, 7. Exemple : (745)8 = 7.82 + 4.81 +5.80= 7.64+4.8+5=(485)10 Dans le système hexadécimal B=16 , les symboles sont : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Exemple : (5AF)16= 5.162 + A.161 +F.160= 5.256+10.16+15=(1455)10 Dans le système binaire B=2 , les symboles sont : 0, 1. Exemple : (10110)2 = 1.24 + 0.23 +1.22+1.21+0.20 = 16+4+2=(22)10 CONVERSIONS Il existe trois types de conversion : Conversion du système décimal à un autre système, cette opération s’appelle le codage. Conversion d’un système autre que le décimal à un autre système décimal, cette opération s’appelle le décodage. Conversion entre deux systèmes non décimaux, cette opération s’appelle le transcodage. III.1 Codage d’un nombre Le codage d’un nombre décimal est sa conversion du système décimal vers un système de base B, tel que B≠10. a. Cas de la partie entière (nombre entier) : Soit N un nombre représenté en base 10 tel que N = (58)10 Mme F.DJIDEL Page 2 (58)10 =(111010)2 Représentation octale : (58)10 =(72)8 Représentation hexadécimale : (58)10 = (3A)16 L’opération de codage est obtenue par des divisions successives d’un nombre décimal par la base B du système jusqu’au moment où le quotient devient nul, le premier reste est le poids faible, le dernier reste est le poids fort. b. Cas de la partie fractionnaire: Le processus du codage de la partie fractionnaire d’un nombre est de faire des multiplications successives de la partie fractionnaire par la base et ne garder que la partie entière, jusqu’à l’obtention d’une partie entière seulement. Exemple : Convertir (58.375)10 en base 2 0.375x2=0.75 0.75x2=1.5 0.5x2=1.0 (58.375)10 = (111010.011)2 Convertir (0.47)10 =( ?)2 Mme F.DJIDEL Page 3 0.47x2=0.94 0.94x2= 1.88 0.88x2= 1.76 0.76x2= 1.52 0.52x2=1.04 0.04x2=0.08………….. D’où (0.47)10 =( 0.011110……)2 Remarque : On peut remarquer qu’un nombre fini dans une base peut conduire à une suite infinie dans une autre base. c. Cas d’un nombre réel Un nombre réel est constitué de deux parties, la partie entière et la partie fractionnaire. La partie entière est codée en effectuant des divisions successives par la base B et la partie fractionnaire est codée en effectuant des multiplications successives par la base B. Exemple : (25.75)10 =( 11001.11)2 (250.8125)10 =( 372.64)8 Le nombre de bits après la virgule détermine la précision. III.2 Décodage d’un nombre Le décodage est l’opération inverse du codage, cette opération est assez simple puisqu’il suffit de faire le développement en polynôme (forme explicite) de ce nombre dans la base B et de faire la somme par la suite. Exemple : (11011)2 = 1x24 +1x23 + 0x22 +1x21 +1x20=16 +8 + 0+ 2 + 1 = (27)10 (372)8= 3x82 +7x81 + 2x80= 3x64 + 56 + 2 = (250)10 (2AF)16= 2x162 +Ax161 + Fx160= 2x256 + 10x16 + 15=(687)10 (43.2)5= 4x51 +3x50+ 2x5-1 = (23.4)10 III.3 Transcodage d’un nombre Le transcodage d’un nombre est le passage entre deux systèmes non décimaux. B1 ≠ 10 B2 ≠10, il n’existe pas de méthode pour passer directement de B1 à B2 s’il n’existe pas de relation entre ces deux bases. L’idée est de passer par le système décimal. B1 Transcodage Décodage B2 Codage B =10 Mme F.DJIDEL Page 4 Exemple : (1110)2 =1x23 + 1x22 +1x21 +0x20=8 + 4+ 2 = (14)10 (14)10 = (16)8 Pour certaines bases (2 vers 8, 2 vers 16) le transcodage peut se faire sans passer par le décimal. -Conversion binaire octale (8=23): Exprimons le nombre (47)10 dans le système octal et dans le système binaire. 47 8 7 47 2 5 8 5 0 1 23 1 2 11 2 1 5 2 1 2 2 0 1 2 1 0 (47)10 =(57)8 =(101 111)2 Règle de conversion : Pour convertir un nombre de la base 2 vers la base 8, il faut découper ce nombre en bloc de 3 bits en partant de la droite vers la gauche pour la partie entière et de la gauche en allant vers la droite pour la partie fractionnaire ensuite remplacer chaque bloc par sa valeur octale correspondante. Pour convertir un nombre de la base 8 vers la base 2, il suffit de transcrire chaque chiffre de ce nombre en binaire sur 3 bits (en partant du poids faible). Exemple : ( 101 111 100 001 )2 =(5 7 4 1 )8 ( 67315)8 = (110 111 011 001 101 )2 -Conversion binaire hexadécimal (16=24) : La propriété d’équivalence entre le binaire et l’octale existe aussi entre le binaire et l’hexadécimal, la seule différence est qu’il faut prendre des blocs de 4 bits. Mme F.DJIDEL Page 5 Exemple : (1 101 0000 1100)2 =(D 0 C )16 Pour convertir un nombre de la base 8 vers la base 16 ou inversement, on peut transiter par la base 10 mais on peut également passer par la base 2. Base 8 base 2 base 16 Base 16 base 2 base 8 Exemple : Convertir (232)8 vers la base 16 (2 3 2)8 = (010 011 010)2 = (0 1001 1010)2 = (9 A)16 (11101,01011)2 = (011 101 , 010 110)2 = ( 35,26)8 (11101,01011)2 = (0001 1101 , 0101 1000)2 = (1D,58)16 Tableau de conversion décimal-Binaire Décimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 IV. Binaire 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Hexadécimal 0 1 2 3 4 5 6 7 8 9 A B C D E F Les opérations arithmétiques en binaire Les opérations appliquées en décimal sont les mêmes dans n’importe quelle base, il n’ya que la base qui change. 1. L’addition binaire : 0 + 0= 0 0+1=1 1+0=1 1 + 1 =0 report 1 Remarque : Le report apparait dès que la somme atteint la base. Mme F.DJIDEL Page 6 Exemple : 2. La soustraction binaire : 0–0=0 0 – 1 = 1 emprunt 1 1–0=1 1–1= 0 Exemple : réaliser (11101) - (0111) 3. La multiplication : 0 x 0 =0 0x1=0 1x0=0 1x1=1 Exemple : 1101 X 1011 1101 1101. 13 x 11 = 143 multiplicande multiplicateur 101. . . 10001111 La multiplication consiste à faire une suite d’addition avec le multiplicande décalé vers la gauche. Cette opération est répétée autant de fois qu’il y’a d’éléments binaires dans le multiplicateur. Il faut donc pour réaliser une multiplication disposer de la fonction d’addition et de décalage. Mme F.DJIDEL Page 7 4. La division binaire : V. Représentation des nombres entiers signés Il existe deux types d’entiers : - Les entiers non signés (positifs par exp : une longueur). - Les entiers signés (positifs ou négatifs par exp : une température) Nous posons le problème : Comment indiquer à la machine qu’un nombre est négatif ou positif ? Il existe trois méthodes pour représenter les nombres signés : - Représentation signe/valeur absolue (SVA) Représentation en complément à un CA1 (complément restreint). Représentation en complément à deux CA2 (complément à vrai). Pour traiter les nombres signés, on ajoute un bit de signe au nombre, « 0 » pour les nombres positifs et « un » pour les nombres négatifs. 1. Représentation signe/valeur absolue (SVA) Dans cette représentation, un nombre est représenté par son signe et sa valeur absolue en binaire. Exemple : (+52)=0 1 1 0 1 0 0 (-52)= 1 1 1 0 1 0 0 Exemple : Nous utilisons n=3 bits pour représenter des nombres en SVA Signe 0 0 0 0 1 1 1 1 VA 00 01 10 11 00 01 10 11 N +0 +1 +2 +3 -0 -1 -2 -3 Mme F.DJIDEL Page 8 Dans cette représentation, si nous utilisons n bits, l’intervalle des valeurs qu’on peut n- 1 représenter est : -(2 – 1) ≤ N ≤ +(2n- 1 – 1) Cette représentation est assez simple, le « 0 » possède deux représentations +0 et -0, ce qui conduit à des difficultés au niveau des opérations arithmétiques. 2. Représentation en complément à un (CA1): On appelle complément à un d’un nombre N un autre nombre N’ tel que : N + N’ = 2n – 1 Avec n le nombre de bits de N Exemple : N= 1010 (4 bits), N’ = (24 – 1) – N =15-N=(1111)2 – (1010)2 =(0101)2 Pour trouver le complément à un d’un nombre, il suffit d’inverser tous ses bits. Exemple : CA1(11010) = (00101) CA1(0101101) = (1010010) Remarque : - Pour les nombres signés, le bit de poids fort indique le signe du nombre. CA1(CA1(N))=N Exemple :- Quelle est la valeur décimale représentée par la valeur 101010 en CA1 sur 6 bits. Le bit de poids fort = 1, donc le nombre est négatif Valeur = -CA1(101010)=- (010101)2 = -(21)10 -Nous utilisons 3 bits pour représenter des nombres en CA1 Décimal +0 +1 +2 +3 -0 -1 -2 -3 CA1 000 001 010 011 111 110 10 1 10 0 Dans cette représentation, si nous utilisons n bits, l’intervalle des valeurs qu’on peut n- 1 n- 1 représenter est : -(2 – 1) ≤ N ≤ +(2 – 1). Dans cette représentation le « 0 » possède deux représentations. Mme F.DJIDEL Page 9 3. Représentation en complément à deux (CA2): Le complément à deux d’un nombre binaire s’obtient simplement en prenant le complément à un de ce nombre et en ajoutant 1 au bit de poids le plus faible. CA2(N)=CA1(N) + 1 Exemple : CA2(101101)=010010+1=010011 CA2(0101.011)=1010.100+0.001=1010.101 Nous utilisons 4 bits pour représenter des nombres en CA2 Décimal +0 +1 +2 +3 +4 +5 +6 +7 -0 -1 -2 -3 -4 -5 -6 -7 -8 SVA 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 XXXXXX CA2 0000 0001 0010 0011 0100 0101 0110 0111 0000 1111 1110 1101 1100 1011 1010 1001 1 000 Si nous utilisons 5bits on peut représenter les valeurs : -16 ≤ N ≤ +15 Le CA2 d’un nombre positif est le nombre lui-même en binaire. Le CA2 d’un nombre négatif est obtenu en calculant le CA2 de son équivalent positif. CA2(CA2(N))=N Exemple : (-7)10 = CA2(0111)=(1001) (+7)= (0111)2 Dans cette représentation le « 0 » ne possède pas une double représentation. L’intervalle des valeurs qu’on peut représenter si nous utilisons n bits est : Mme F.DJIDEL Page 10 -(2n- 1 ) ≤ N ≤ +(2n- 1 – 1) Grâce au complément à deux toutes soustractions se transforme à une addition A – B = A+(-B)= A + CA2 (B) Exemple : Soit A et B 2 nombres représentés en C2 sur 8 bits, trouver leurs valeurs décimales. A =( 00110101)CA2 B = (11101011)CA2 A =( 00110101)CA2 le bit de signe est 0 donc A est positif, donc A =( 00110101)CA2 =+(00110101)2 = 1x20+1x22+1x24+1x25= 1+4+16+32=(+53)10 B = (11101011)CA2 le bit de signe est 1 donc B est négatif, pour trouver la valeur décimale on doit calculer son CA2 pour revenir à sa vraie valeur binaire : B= - (00010101)2 = - (1x20+1x22+1x24)=-(1+4+16)= -(21)10 3. Opérations en complément à deux a. L’addition en CA2 Cas 1 : Deux nombres positifs +9 0 1 0 0 1 cumulande +4 + 0 0 1 0 0 cumulateur +13 01101 Retenue =0 Débordement =0 Remarque : Dans la notation en CA2, il faut s’assurer que le cumulande et le cumulateur aient un nombre de bits identique. Cas 2 : Un nombre positif et un nombre négatif plus petit 1 +9 0 1 0 0 1 Retenue=1 -4 + 1 1 1 0 0 Débordement =0 +5 1 00101 +4=00100 La retenue après le bit de signe n’est pas prise en compte dans le résultat. Mme F.DJIDEL Page 11 Cas 3 : Un nombre positif et un nombre négatif plus grand -9 1 10 1 1 1 Retenue=0 +4 + 0 0 1 0 0 Débordement =0 -5 1 1011 Le résultat est négatif et est en CA2 Cas 4 : Deux nombres négatifs 1 1 -9 1 0111 -4 + 1 1 1 0 0 -13 1 1 0 0 1 1 Retenue=1 Débordement =0 Cas 5 : Nombres égaux opposés -9 10111 +9 01001 0 00000 Retenue=0 Débordement =0 10111 -9 + 11000 -8 1 01111 - 17 Retenue=1 Débordement=1 Remarque : si nous utilisons 6 bits pour faire (-9)+(-8) 110111 + 111000 110111 1 10111 1=-(010001)2 =-(17) Retenue = 1 Débordement =0 b. Soustraction en complément à deux Toute opération de soustraction se résuma à une addition lorsqu’on utilise le complément à deux Exemple : (+9) – (+4) =(+9) + (-4) =(+9) +CA2(-4) = (01001)+ (11100) = 00101 Exercice : Réaliser les opérations suivantes sur 5 bits en utilisant le CA2 (étudier les cas de dépassement : a) +9+8 b) -7-13 c) +15-1 d) -15+1 Mme F.DJIDEL Page 12 VI. 4. La retenue et le débordement On dit qu’il y-a une retenue si une opération arithmétique génère un report. On dit qu’il y-a un débordement (overflow) ou dépassement de capacité si le résultat de l’opération sur n bits est faux : - Le nombre de bits utilisés est insuffisant pour contenir le résultat, autrement dit, le résultat dépasse l’intervalle des valeurs sur les n bits utilisés. - En additionnant 2 nombres de signes différents, il ne peut pas y avoir de dépassement, par contre lorsqu’on additionne deux nombres de même signe, on a un dépassement si le signe du résultat est différent du signe des deux nombres additionnés. Un débordement donne toujours un résultat inexact. La représentation des nombres réels Un nombre réel est constitué de 2 parties ; la partie entière et la partie fractionnaire, séparés par une virgule. PB : Comment indiquer à la machine la position de la virgule ? Il existe deux méthodes pour représenter les nombres réels : - Avec une virgule fixe - Avec une virgule flottante VI.1 La virgule fixe : Dans cette représentation, la partie entière est représentée sur n bits et la partie fractionnaire sur p bits, en plus un bit pour le signe. Exemple : n=3, p=2, nous obtenons les valeurs comme indiqués Signe 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . . . . P.E 000 000 000 000 001 001 001 001 010 010 010 010 011 . . . . . . P.F 00 01 10 11 00 01 10 11 00 01 10 11 00 . . . . . . Valeur +0.0 +0.25 +0.50 +0.75 +1.0 +1.25 +1.50 +1.75 +2.0 +2.25 +2.50 +2.75 +3.00 . . . . . Mme F.DJIDEL Page 13 0 1 . . . . 1 1 1 1 111 000 . . . . 110 111 111 111 11 01 . . . . 01 01 10 11 +7.75 -7.75 . . . . -1.00 -0.75 -0.5 -0.25 -7.75 ≤ N ≤ +7.75 Dans cette représentation les valeurs sont limitées et nous n’avons pas une grande précision (exposant fixe), d’où vient la virgule flottante. VI.2 La virgule flottante : Chaque nombre réel peut s’écrire de la façon suivante : 𝑁 = ±𝑀 ∗ 𝐵 Avec M : Mantisse B : Base e : Exposant exemple : -(110.101)2 = - (0.110101)*23 (1001.11)2 = (0.100111)*24 (1001.11)2 =(0.0100111*25 Il faut donc représenter les nombres sous une forme normalisée afin que la représentation ne varie pas d’un logiciel à un autre. L’écriture en virgule flottante est normalisée par la forme IEEE754 (Institute of Electrical and Electronics Engineers). Format IEEE754 : On distingue deux normes - La simple précision (32 bits) 1 bit 8bits 23 bits signe exposant mantisse Mme F.DJIDEL Page 14 - La double précision (64 bits) 1 bit 11bits 52 bits signe exposant mantisse Tout nombre réel peut s’écrire de la façon suivante : 𝑁 = ±1, 𝑀𝑎𝑛𝑡𝑖𝑠𝑠𝑒 ∗ 2 é Le 1 est un bit caché. La mantisse est la partie après la virgule on l’appelle aussi pseudo-mantisse. L’exposant biaisé= Exposant réel + Biais Biais= 2p-1 -1 tel que p : nombre de bits réservés pour l’exposant, dans notre cas p=8 Bais=127. Ceci permet de rendre l’exposant positif. 0000 0000 1111 1111 - + 127 Le format IEEE 754 est le suivant : 1 bit signe 8bits Exposant Biaisé 23 bits Pseudo-mantisse Exemple : (8.625)10= (1000.101)2 = (1.000101)*23 Bit de signe=0 car nbre ˃ 0 Exposant réel =3 Exposant Biaisé = 3 + 127 =130 = (10000010)2 Pseudo-Mantisse = 00010100000000000000000 D’où l’écriture de 8.625 dans la norme IEEE754 est : 0 10000010 00010100000000000000000 4 1 0 A 0 0 0 0 (8.625)10 = (410A0000)IEEE754 Mme F.DJIDEL Page 15