Académique Documents
Professionnel Documents
Culture Documents
html
---
Chapitre 3
Opérateurs arithmétiques
3.1 Introduction
3.2 Représentation (codage) des nombres
3.2.1 Représentation Simples de Position
3.2.2 Conversions entre Bases
3.2.3 Représentation en Signe et Valeur Absolue
3.2.4 Représentation en Complément à 2
3.2.5 Autres Codes
3.3 Fonctions arithmétiques
3.3.1 Additionneur
3.3.2 Soustracteur
3.1 Introduction
Jusqu’à présent, nous avons principalement travaillé sur des bits simples (comprendre : des nombres de 1 bit),
ce qui ne nous permet de représenter que des valeurs allant de 0 à 1. Dans ce chapitre nous introduirons la
représentation des nombres plus grands que 1, ainsi que les opérateurs associés. Nous verrons donc :
Un nombre positif N dans un système de base b peut être exprimé sous la forme polynomiale
La représentation simples de position correspondante est an-1 an-2 . . . a1 a0, a-1 . . . a-m
La position d’un chiffre rappelle quelle puissance de la base multiplie ce chiffre :
S’il s’agit du système binaire (b = 2), les chiffres sont appelés bits :
Si l’on se déplace d’un rang vers la gauche, le poids est augmenté d’un facteur b. Si le déplacement se fait
vers la droite, il y a une division par b.
Le tableau 3.1 montre la représentation simples de position pour les nombres décimaux de 0 à 8 et leurs
correspondances en binaire. Les décalages correspondant aux multiplications et divisions par 2 peuvent être
vus :
Pour cette conversion, il suffit de substituer la valeur b dans l’expression polynomiale par la valeur de la base :
Par exemple, pour trouver le correspondant de (A1C)16 dans le système décimal, il suffit de faire :
Partie Entière
Cette conversion consiste à faire des divisions successives du nombre décimal par b, jusqu’à obtenir un
quotient nul. Le nombre dans la base b correspond aux restes des divisions faites, dans le sens inverse où ils
ont été obtenus.
Partie Fractionnaire
Cette conversion consiste à faire des multiplications successives du nombre décimal par b. Le nombre dans la
base b correspond aux parties entières des produits des multiplications faites, dans le sens direct où ils ont été
obtenus. Soit la conversion 0,5710 vers base 2 :
A l’aide de n bits, la conversion se fait sur chaque chiffre en base 2 pour ensuite les juxtaposer :
Si les deux bases sont des puissances de 2, la conversion se fait en utilisant 2 comme base relais (i vers 2 et
ensuite 2 vers j). Sinon, la base relais est la base 10.
La représentation en signe et valeur absolue consiste à ajouter un bit s à la représentation simples de position
afin de pouvoir représenter des nombres négatifs . La convention
adoptée est s = 0 pour un nombre positif et s = 1 pour un nombre négatif. Ainsi, pour une représentation sur 4
bits, +5 = 0101 et -5 = 1101.
Du fait que cette représentation implique un traitement différent pour le bit de signe, elle est peu
intéressante pour l’implantation d’opérateurs arithmétiques.
Il existe une forme de représentation des nombres signés plus efficace que la représentation en Signe et
Valeur Absolue : le complément à deux. Le principe du complément à deux est simple : dans la représentation
non signée (simples de position, ou notation binaire habituelle) sur n bits, on travaille implicitement modulo
2n. Ainsi, sur n bits :
. C’est pour cela que pour éviter les ambiguïtés, on se limite (en binaire non signé) à la représentation des
nombres allant de 0 à (2n - 1) (soit 2n nombres au total).
Ce principe du modulo peut être étendu aux nombres négatifs. Toujours sur n bits :
Le complément à deux n’est qu’une convention, consistant à dire qu’ on décale la plage des nombres
représentables, en mettant le 0 au centre, et que, par compatibilité avec la représentation binaire non
signée, les nombres commençant par 0 seront considérés positifs, et ceux commençant par 1
négatifs.
Autrement dit, au lieu de représenter des nombres non-signés allant de 0 à (2n - 1), on représentera des
nombres signés allant de -(2n-1) à +(2n-1 - 1), soit 2n nombres au total dans les deux cas.
Remarques :
Le complément à deux permet que l’opérateur utilisé pour faire des additions puisse aussi faire des
soustractions : au lieu de soustraire un nombre à l’aide d’un opérateur spécialisé de soustraction, il suffit
d’ajouter son opposé en complément à deux, et de travailler à nombre de bits constant (pour rester modulo 2n ).
Exemple : soit l’opération 7 - 5 en décimal. En binaire, pour une représentation sur 4 bits, cela correspond à
01112 - 01012 .
La soustraction de 01012 peut être remplacée par une addition de son complément à 2, soit 10112 .
7 - 5 = 7 + (-5) = 01112 + 10112 = 100102. Il ne faut garder que les 4 bits de poids faible, pour obtenir la
réponse exacte, c’est-à-dire, 00102 = 2.
Ci-après sont présentés quelques codes utilisés dans les systèmes numériques. Les codes de Gray, p parmi
n et le code à bit de parité ne sont pas pondérés, c’est-à-dire qu’il n’y a pas de poids attribué à chaque
position (rang). Les rapports entre les symboles des codes et les nombres sont de simples tableaux de
correspondances convenus. De ce fait, ils sont moins appliqués aux opérations arithmétiques. Ils sont
principalement rencontrés dans les systèmes de communication pour le contrôle de transmission/réception de
données.
Dans le code BCD chaque chiffre décimal est codé en binaire à l’aide de 4 bits,
comme le montre le tableau ci-dessous. Pour la conversion DCB vers Binaire, il suffit de convertir chaque
chiffre individuellement. La conversion Binaire vers DCB se fait en regroupant les bits 4 par 4. Ainsi, 178DCB =
0001011110002.
Code de Gray
Dans le code de Gray, deux termes successifs ne diffèrent que par un seul bit. Les termes ne différant que par
un seul bit sont appelés adjacents.
Code p parmi n
Dans ce code, à chaque nombre décimal correspondent n bits, dont p valent 1 et n-p valent 0. Il permet de
détecter jusqu’à une erreur : si lors d’une communication, il y a réception d’un nombre de 1 différent de p, cela
signifie il y a eu une erreur de transmission. Le tableau 3.2 illustre un exemple de ce code pour le cas n = 5 et
p = 2.
Dans ce code, un bit est ajouté aux symboles de départ de sorte que le nombre total de 1’s soit pair (impair), si
la parité convenue est paire (impaire). Le tableau 3.2 donne l’exemple pour 4 bits d’information et une parité
paire.
La réalisation de fonctions arithmétiques est basée sur la décomposition de ces fonctions en opérations
booléennes élémentaires.
3.3.1 Additionneur
Considérons l’addition de deux nombres ai et bi codés sur 1 bit. Le résultat peut prendre les valeurs 0, 1 ou 2,
que l’on peut coder binaire comme 00, 01 et 10. Les deux bits de ce code sont appelés bit de somme si (poids
faible) et bit de retenue ri+1 (poids fort). A l’aide de ces deux bits, l’addition s’exprime de la façon suivante :
L’addition peut être vue comme une fonction booléenne à deux entrées (ai et bi) et à deux sorties (s i et ri+1 ).
Cette fonction est appelée demi-additionneur. Ses caractéristiques sont résumées dans le tableau 3.1.
Nous pouvons généraliser cette structure pour décrire l’addition de deux mots A et B de tailles supérieure à
1. Chacun des bits ai et bi sont additionnés un par un en commençant par les bits de poids faible. Il faut pour
cela répercuter à l’étape i + 1 l’éventuelle retenue provenant de l’addition de ai et bi. Une variable
supplémentaire ri représentant une retenue entrante est donc introduite. Par analogie, le bit ri+1 est appelé
retenue sortante.
A chaque itération i, le résultat de cette addition des nombres ai, bi et ri peut prendre les valeurs 0, 1, 2 ou
3, que l’on code en binaire comme 00, 01 et 10, 11. En utilisant les notations précédentes, l’équation
arithmétique de l’additionneur « 1 bit » avec retenue entrante (ou additionneur « complet ») est alors :
Nous présentons dans les tableaux suivants (3.3, 3.4, 3.5) la table de vérité de l’additionneur complet ainsi que
les tables de Karnaugh associées à ri+1 et s i.
Nous observons sur les tables de Karnaugh que l’expression de la somme s i n’est pas réductible, la forme
en damier obtenue est caractéristique des fonctions de type ou-exclusif :
En ce qui concerne la retenue, pour donner un exemple « d’optimisation », nous allons supposer l’existence
d’une structure de calcul de la somme et tenter de mettre en facteur le « matériel » :
Pour des nombres de n chiffres, la sommation va entraîner une propagation de la retenue si l’on adopte la
structure série qui résulte de la mise en oeuvre de l’équation précédente. Dans l’additionneur à retenue série
(Ripple Carry Adder), on assiste à un phénomène de propagation de la retenue (cf. Fig. 3.3), facile à cerner si
Remarque : La structure proposée dans la Fig. 3.2 pour l’additionneur complet n’est pas la seule possible.
Suivant l’objectif visé par l’utilisateur, d’autres structures sont envisageables, notamment dans le but
d’accélérer la vitesse de calcul de la retenue qui conditionne le temps de calcul total de l’additionneur.
3.3.2 Soustracteur
La soustraction de deux nombres ai et bi codés sur 1 bit donne un résultat pouvant prendre les valeurs -1, 0 et
1. Nous pouvons formuler cette opération sous la forme :
où ri+1 et di sont deux variables booléennes représentant respectivement la retenue sortante et la différence.
Attention : Le bit de retenue ri+1 est interprété comme une valeur négative.
Cette fonction de deux entrées et deux sorties est appelée demi-soustracteur. Ses caractéristiques sont
résumées dans le tableau suivant :
Nous pouvons généraliser cette structure pour décrire la soustraction de mots de taille supérieure à 1. Pour
cela il faut introduire une variable supplémentaire ri qui représente une retenue entrante. L’équation générale
du soustracteur « 1 bit » avec retenue entrante (ou soustracteur « complet ») est alors :
Nous présentons, dans les tableaux suivants, la table de vérité du soustracteur complet (Tab. 3.6) ainsi que
les tables de Karnaugh associées à ri+1 (3.7) et di (3.8).
Un raisonnement identique à celui utilisé dans le cas de l’additionneur aboutit aux équations :