A. Lebrun
La base 2 Un nombre peut se représenter en base deux par une suite de 0 ou de 1. Chaque bit a un poids qui dépend de son rang Le format n impose que le nombre est compris entre 0 et 2 n -1 ) Ex: pour le format 6 le nombre est compris entre 0 et 63.
Nombre décimal Ce qui est vrai pour les nombres entiers est également vrai pour les nombres décimaux. Le bit de rang R avant la virgule a un poids de 2 r et celui de rang R’ après la virgule a un poids de 2 –r’ N = b8b7b6b5b4b3b2b1b0,b(-1)b(-2) N = b8*2 8 + b7*2 7 + b6*2 6 + b5*2 5 + b4*2 4 + b3*2 3 + b2*2 2 + b1*2 1 + b0*2 0 + b(-1)*2 (-1) + b(-2)*2 (-2)
Calcul en binaire Les calculs en binaire ont été initiés par Von Leibnitz et développé par Claude Shannon Gottfried Wilhelm von Leibniz, le grand mathématicien précurseur de l'informatique et des calculs en nombre binaire.
Addition de deux bits en binaire Pour additionner deux nombres en binaires, on agit comme en décimal: on additionne les bits de même rang de chacun des nombres Table d’addition en binaire 0+0=0S=0 R=0 0+1=1S=1 R=0 1+0=1S=1 R =0 1+1= 10S= 0 R = 1
Circuits pour S et R L’addition de deux bits a et b donne deux bits S(a,b) et R (a,b) respectivement appelé Somme et Retenue D’après la table d’addition S(a,b)= ab + ab R (a,b) = ab On en déduit le circuit que l’on appellera demi- additionneur
Schéma du demi-additionneur A B =1 S = a+b & R = a.b
Additionneur complet Pour faire une addition sur le rang n, il faut tenir compte de la retenue du rang n-1. Pour additionner deux nombres, on doit donc être capable d’additionner trois bits a,b et r -1 Il faut donc trouver les fonctions R et S d’une somme de trois bits
Table de vérité abR-1SR
Fonction S Sa b R La fonction S est donc donnée par: S= a + b + R-1
Fonction R Ra b R R = R-1 (a + b) + ab
Schéma additionneur An bn Rn-1 =1 Sn & & >1 Rn
Schéma simplifié En général on représente l’additionneur complet 1 bit sous la forme suivante: Rn-1 ADD an bn Sn Rn
Additionneur N bits Montage en cascade Pour réaliser l’addition de deux nombres de n bits, il suffit de monter en cascade des additionneurs 1 bits Il faut laisser la première entrée de retenue de l’additionneur a 0 Attention le résultat de l’addition de 2 nombres de N bits comprend N+1 bits (N bits de sommes et 1 bit de retenue)
Additionneur 3 bits ADD a b S R a2 a1 a0b2 b1 b0 S0 S1 S2 R2
Schéma simplifié d’additionneur N bits.
Inconvénient L’addition cascade devient longue si le nb de bits devient important car il faut pour calculer la dernière retenue connaître toutes celles avant Amélioration possible: faire un additionneur avec un générateur de retenue anticipée: Sn+1 A0.. An B0 Bn A1 B1 R0 add S0 add S1 S2 Sn add An Bn GRA
Calcul anticipé des retenues R0= a0.b0= P0 R1= a1.b1 + R0(a1+b1) = P1 + P0S1 R2= a2.b2 + R1 (a2 + b2) = P2 + (P1 + P0S1)(S2) R2 = P2 + P1S2 +P0S1S2 R 3 = P3 + R2(a3 + b3) = P3 + P2S3 +P1S2S3 + PoS1S2S3 Ri = Pi + P1-1Si +Pi-2SiSi-1 + …. + P0S1S2…Si Le calcul anticipé des retenues devient intéressant à partir de 8 bits en terme de temps de calcul.
19 Représentation des nombres réels Codage des réels : virgule flottante flottant stocké sous la forme M * B E M : Mantisse ; B : Base ; E : Exposant exemple : = Représentation IEEE 754, base 2 (signe 1 bit, exposant et mantisse sur 32 ou 64 bits pour simple et double précision) SM : signe de la mantisse : 1 bit Eb : exposant biaisé : 8 ou 11 bits M : Mantisse : 23 ou 52 bits
20 Mantisse et exposant Signe : bit de poids fort (0 = + ; 1 = -) Exposant placé avant la mantisse pour simplifier les comparaisons sur 8 bits : sans signe mais biaisé de 127 (on enlève 127) : Eb = 0 ⇒ E = 0 – 127 = -127 Eb = 255 ⇒ E = 255 – 127 = 128 Remarque : E>0 si et seulement si le bit de poids fort de Eb =1 Mantisse normalisée : bit de poids fort n’est pas 0 et un seul chiffre avant la virgule ex : 3,25 10 =11,01 = 1,101 * 2 1 s’écrit ……0
21 Virgule Flottante Mantisse : Comme le bit de poids fort de la mantisse est nécessairement 1, on ne l’indique pas (gaspillage de place). Il est implicite partie fractionnaire = f1f2 …fn ⇒ m = 1,f1f2…fn nombre x = (-1) SM * 1,M * 2 Eb-127 Exemple x = (-2,5) 10 = (-1,01*2 1 ) 2 SM = 1 ; E= 1 => Eb= 128 = ; m=1,01 => M = 010…… ……0
Addition de nombres réels Pour additionner les nombres réels, on fait comme on a appris en primaire (attention de ne pas oublier le 1 non codé représentant la partie entière) Ecrit les nombres dans la représentation réelle Aligner les puissances en décalant de la plus petite de de la différence des puissances entre les deux nombres Faire l’addition normalement Réécrire le résultat correctement suivant la représentation 1,b0b1
Il faut décaler de deux rangs B pour aligner les mantisses sans oublier le 1 23 Exemple : 452,5+117,5 A= *2 8 B= *2 6 Addition des mantisses alignées A= *2 8 +B= *2 8 S= *2 8 Normalisation de la mantisse S'= * ,5= 117,5= ……0
Représentation des nombres Représentez en notation à virgule flottante les nombres suivants: , ,
Représentation des nombres Représentez en notation à virgule flottante les nombres suivants: -125 = 12,35 = 1865,32 = = ……
Représentation des entiers négatifs Pour représenter les nombres négatifs, le plus simple est prendre un bit pour le signe et les autres pour la valeur absolu du nombre Par convention 0 indique un nombre positif et 1 indique un nombre négatif 5= 0101 et -5= 1101 mais on a deux représentations de 0 Ex: sur 4 bits 0=0000 mais on a aussi 0=1000 Autre inconvénient: la somme de deux nombres de signe différent donne un résultat faux. (5+ (-3)) = = soit 0
Représentation en complément à 1 Les nombres positifs sont écrits en base 2, pour les nombres négatifs on inverse tous les bits 5= 0101 donc –5 = 1010 Il y a toujours deux représentations de 0 Le résultat de la somme de deux nombres de signes différents donne une valeur qui diffère de 1 du résultat exact 5 + (-3)= = soit 1 si on ne tient pas compte du bit de retenue.
Représentation en Complément à 2 Identique au complément à 1 sauf que l’on ajoute 1 à la représentation du nombre négatif en complément à 1 +5 = 0101 (-5) c1 = 1010 (-5) c2 = 1011 Sur 4 bits, le nombre le plus grand est codé en C et vaut donc 7 (-7) c2 = 1001 et la combinaison 1000 correspond à -8 En C2 sur n bits on peut coder les nombres entre - 2 n-1 < N < 2 n-1 -1
Code de calcul Pour faire les calculs, on utilise toujours le code C2 Les nombres positifs sont représentés par leur valeur en base 2 précédée de 0 Les nombres négatifs sont l’inverse de la représentation positive + 1 Les résultats sont toujours juste si on reste dans la gamme de valeur que peut représenter le code avec le nombre de bits choisi.
Exercices: Codez les nombres suivants en C2 sur 6 bits
Réponses: Codez les nombres suivants en C2 sur 6 bits 12 = = = = = =
questions Quelles valeurs représentent ces nombres codés en C2?
Réponses Quelles valeurs représentent ces nombres codés en C2? = = = = = -32
Problèmes de dépassement Le fait d’additionner deux nombres positifs ou deux nombres négatifs avec le code C2 peut entraîner un dépassement de capacité Ex 3+6 = = 1001 = (-7) Ex (-4) + (-7) = = = 3 Cela n’est pas gênant car il est facile de le détecter: la somme de 2 nombres de même signe est un nombre de même signe.
Comment faire une soustraction? Une soustraction consiste à additionner un nombre avec l’inverse du second. Pour inverser un bit, on peut prendre une porte inverseuse ou une porte ou exclusif avec 1 branché sur une entrée a1a + 1= a
Comment faire une soustraction On prend un additionneur n bits Sur les entrées A on entre la valeur du premier nombre Sur les entrées B on entre les valeurs du second nombre en les inversant par une porte ou exclusif dont une entrée est à 1 On ajoute 1 sur la valeur de retenue d’entrée Suivant la valeur 0 ou 1 que l’on met sur cette entrée on fait donc une addition ou une soustraction.
Faire une soustraction avec additionneur =1 Vcc a0 an b0 bn
Additionneur_soustracteur Si Ec = 0 additionneur, si Ec=1 soustracteur =1 EC a0 an b0 bn
Additionneur/soustracteur On met 0 sur Add/sous pour avoir un additionneur On met 1 sur Add/sous pour avoir un soustracteur
Réalisation d’un multiplieur
Multiplication = suite d’additions On sait faire l’addition de deux nombres On sait donc réaliser un multiplieur en utilisant des additionneurs On obtient un premier résultat partiel en additionnant les deux premières lignes On ajoute à ce résultat partiel la troisième ligne et ainsi de suite Attention aux décalages Pour multiplier 2 nombres de n bits on a besoin de n-1 additionneurs de 2n bits
Multiplieur 4 bits