Université Alger 1
Faculté des sciences
Département Mathématiques Informatique
Un nombre réel est constitué de deux parties : la partie entière et la partie fractionnelle séparées par une
virgule.
Pour représenter les nombres fractionnaires il est nécessaire de définir la position de la virgule : pour ce
faire, il existe deux formats :
Format virgule fixe. La position de la virgule est fixe d’où le nom
Format virgule flottante. Le nombre à plusieurs représentation, la position de la virgule change à
chaque représentation.
2.1.1 Définition
En se limitant à la représentation binaire en CA2, les nombres fractionnaires vont être représentés de la
manière générale suivante :
Entre les 2 partie, il ya ce qu’on appelle le point décimal. c’est l’appellation classique en base 10 ( on peut
retenir ce nom pour toutes les bases ; c’est indépendant de la base).
Remarque :
1- Cette méthode de conversion peut êtres généralisée à n’importe quelle base >= 2
2- La conversion peut ne pas être précise. Par exemple : si on veut convertir (0.1) en binaire
0.1 × 2 =0.2
0.2 × 2 =0.4
0.4 × 2 = 0.8
0.8 × 2 =1.6
0.6 × 2 =1.2
0.2 × 2 =0.4
0.4 × 2 =0.8 cette séquence se répète à l’infini donc :
0.8 × 2 =1.6 (0.1)10=(0.0001100110……..)2 la séquence 0011 se répète à l’infini
0.2 × 2 =0.4
.
.
.
Si on veut représenter la partie fractionnaire sur seulement 5 bits, on aura comme valeur en décimal :
(0.00011)2= (0.09375)10 ce qui est une erreur relativement considérable. Donc la valeur (0.1) ne possède pas
une représentation binaire exacte sur un nombre fini de bits n. il y aura forcement une approximation.
Ce n’est pas une faiblesse du binaire, mais il suffit de penser à la base 10 pour laquelle il existe une infinité
de nombre également non exactement représentés avec un nombre fini de chiffres.
3- De manière générale, un nombre signé fractionnaire peut être représenté en SVA à virgule fixe avec
un bit de signe + une partie entière + une partie fractionnaire. Par exemple avec 6 bits dont 3 pour la
partie entière, le nombre (+7.75)10=(0111.11)2 est le plus grand nombre réel.
La virgule flottante est une méthode d'écriture de nombres réels fréquemment utilisée dans les ordinateurs.
La notation en virgule flottante est tirée de la notation scientifique.
Remarque :
on remarque que le point décimal et la base ne sont pas représentés (le point décimal est représenté
par l’exposant) ce qui engendre un problème que la normalisation va resoudre
En base 2, on utilise des exposants biaisés : si on a n bits pour représenter l’exposant, on ajoute 2n-1-1
à l’exposant.
Car on peut avoir plusieurs représentations pour un même nombre réel et elles ne donnent pas la
même précision. Pour éviter ce problème et garder la meilleure précision, on utilise la mantisse
normalisée. C'est-à-dire :
1- le chiffre à droite du point décimal est différents 0 (donc le 1er bit de la mantisse sera 1).
2- Sa partie entière est nulle (une exception faite pour le 0 est normalisé)
Exemple : 5.86 * 102 et 0.0062 *10-5 ne sont pas normalisés tandis que 0.8105 *102 l’est
Décalage de l'exposant
On applique un décalage à l'exposant trouvé et on stocke cette valeur décalée. La valeur du décalage dépend
du nombre n de bits utilisés pour stocker l'exposant :
n-1
décalage (biais)= 2 -1
Exemple : on suppose que l’exposant est codé sur 7 bits et la mantisse sur 16 bits.
1- On veut représenter le nombre 125.5
Etape 1 : convertir le nombre en binaire : (125.5)10=(1111101.1)2
Etape 2 : déterminer la mantisse normalisée : (1111101.1)2=1.1111011 × 26. Le bit le plus significatif
sera caché.
Etape 3 : La valeur binaire dans le champ exposant est la valeur réelle décalée par excès d’un biais
le biais = 2nbrBitExpo-1 -1 à l’exposant et déterminer sa représentation en binaire :
Biais= 26-1=63 donc Exposant=6+63=69=(1000101)2. La représentation de 125.5 est donc (comme le
nombre est positif donc le bit de signe =0) :
Signe Exposant Mantisse
biaisé (décalé)
0 100 0101 1111 0110 0000 0000
127=2nbrBitExopsant-1-1=28-1-1=27-1=128-1
Exemple :
Coder les réels suivants (représentés en base 10) en simple précision :
2) -0.078125
Bit de signe=1
Représentation binaire : 0.000101
0.078125 × 2 = 0.15625 0
0.15625 × 2 = 0.3125 0
0.3125 × 2 = 0.625 0
0.625 × 2 = 1.25 1
0.25 × 2 = 0.5 0
0.5 × 2 = 1.0 1
Normalisation : 1.01 × 2-4
Exposant réel =-4 , exposant biaisé= -4+127=123=01111011
Donc : 1 01111011 01000000000000000000000
3) 13.625
Bit de signe =0 nombre positif
Représentation binaire : 1101.101 en SVA
Normalisation : 1.101101 × 23
Exposant réel = 3 , exposant biaisé=3+127=130 = 10000010
Donc : 0 10000010 10110100000000000000000
4) 0
Bit de signe : 0 ou 1
Exposant décalé 8 bits :-127+127= (0)10 = (00000000)2
(10000000000000000000000000000000)2 = (80000000)16
ou
(00000000000000000000000000000000)2 = (00000000)16
Coder les nombres en virgule flottante utilisant la nome IEEE754 simple précision :
2.3.1 Multiplication
L’algorithme de la multiplication flottante est donc :
1- Multiplication entière des mantisses
2- Le nouvel exposant est égal à la somme des exposants moins le biais
3- Le résultat est normalisé et arrondi au nombre de bits de la mantisse
4- Ajout du signe et suppression du bit caché
Exemple :
Le biais est 127 et la mantisse est à 4 bits
0 10000100 0100 × 1 00111100 1100 = ?
Multiplication :
1.0100
× 1.1100
00000
00000
10100
10100
10100
10.00110000
Comme la mantisse est sur 4 bits donc le résultat est arrondi au nombre de bit de la mantisse
La valeur résultat est stockée en mémoire comme suit : 1 01000010 0001
Donc A=1.01 × 22
On a pour B
S E+127 Matisse
1 10000001 11000000000000000000000
Donc B=-1.11 × 22
S E+127 Matisse
1 10000100 00011000000000000000000
Ou en notation abrégée = C20C0000
On a pour B :
S E+127 Matisse
1 01111101 00110011001100110011010
E+127=01111101=125, donc e=-2, et la mantisse=-1.00110011001100110011010
Donc B=-1. 00110011001100110011010 × 2-2
1.11010011001100110011010 × 22
- 0.00010011001100110011001 1010 × 22
1.11000000000000000000001 × 22
On n’additionne pas les 4 derniers bits de B, car ils sont hors des 23 bits significatifs
S E+127 Matisse
0 10000001 11000000000000000000001
Qu’on peut abréger en notation hexadécimale : 40E00001
Convertir (-532)10
Comme le nombre est négatif, le bit de signe est 1 .
(532)10=(1000010100)2= 1.000010100 × 29
L’exposant biaisé est obtenu en ajoutant 1023. C’est donc 1023+9=1032=10000001000 sur 11 bits
La partie fractionnaire de la mantisse normalisée est 000010100
On a donc le résultat :
En fait, la première codification a été liée au mode de transmission des données vers l'ordinateur.
Pour des raisons de fiabilités, cet octet a été séparé en 2 :
A fin de pouvoir transmettre et stocker tous les caractères alphanumériques, des codes ont été établis tels
que :
Code ASCII
Code UNICODE
3.1.1 Description
Le code ASCII (American Standard Code for Information Interchange) définit un jeu de 128 caractères
numérotés de 0 à 127. Sept bits suffisent donc à les coder. Cependant, comme la plupart des ordinateurs
travaillent sur des données représentées sur un nombre de bits multiple de huit, les caractères ASCII sont
codés sur un octet, le bit de poids fort étant 0.
La table ASCII est composée de deux parties :
La deuxième partie regroupe les caractères imprimables et leur affecte les nombres (codes) de 32 à
126.
Exemple
Remarque :
De plus, la codification ASCII a respecté l'ordre de l'alphabet, ce qui permet de manipuler les données
par leur codification et d'en effectuer un tri alphanumérique. Il est possible dans les logiciels d'utiliser
le caractère ASCII ou le code correspondant.
Les codes de 65 90 représentent les caractères Majuscules et ceux de 97 122 les minuscules. La
différence étant 32 donc il suffit de changer le 6ième bit pour passer de l’un à l’autre.
Exemple
Le code ASCII de ‘B’ = 66 =01000010 et le code ASCII de ‘b’ = 98=01100010. La différence étant au niveau du
6ième bit.
Le code ASCII a été mis pour la langue anglaise, il ne contient pas les caractères accentués. Il a fallu
donc étendre la table ASCII pour pouvoir coder les nouveaux caractères. Les mémoires devenant plus fiables
et le 8ième bit a pu être utilisé pour coder plus de caractères.
En ajoutant le 8ième bit, la nouvelle table contiendra 256 caractères. Les 128 premiers sont identique à la
table de base le reste permet de faire la différence entre payés.
Parmi ces extensions citons la famille des codes ISO 8859 :
Les codes ISO 8859 sont au nombre de 16 et désignés par ISO 8859-n où n est un entier compris entre 1 et
16.
Tous ces codes définissent chacun un jeu de 224 caractères codés de 0 à 127 et de 160 à 255 (les codes de
128 à 159 sont inutilisés). Tous ces caractères peuvent et sont représentés sur un octet.
Les caractères de codes compris entre 0 et 127 sont ceux du code ASCII.
Les codes ISO 8859 se distinguent par le jeu des caractères de 160 à 255.
Pour avoir les caractères accentués du français il faut utiliser l’ISO 8859-1 (parfois appelé LATIN-1)
Exemple
Sur 8 bits.
En décimal : 63 97 32 118 97 63 32 63 97 32 118 97 33
En hexadécimal : 43 61 20 76 61 3F 20 43 61 20 76 61 21
4D 72 50 72 6F 6F 66 20 45 78 61 6D 65 6E 73 20 45 78 65 72 63 69 63 65 73 20 41 73 74 75 63 65 73
Texte : MrProof Examens Exercices Astuces
3.2 UNICODE
Au lieu d'utiliser seulement les codes 0 à 127, il utilise des codes de valeur bien plus grande.
Le code UNICODE permet de représenter tous les caractères spécifiques aux différentes langues. De
nouveaux codes sont régulièrement attribués pour de nouveaux caractères: caractères latins (accentués ou
non), grecs. L'alphabet Chinois Kanji comporte à lui seul 6879 caractères.
Les diverses extensions du code ASCII, dont les ISO 8859, présentent l’inconvénient d’être incompatibles
entre elles, et le plus souvent d’être spécialisées pour un jeu de caractères lié à une langue. Comment alors
coder dans un même document des textes rédigés avec des alphabets aussi divers que les alphabets latin,
cyrillique, grec, arabe, ... ?
Unicode, qui actuellement à sa septième version recense environ 110000 caractères, attribue à chacun d’eux
un nom et un numéro (appelé point de code) le plus souvent exprimé sous la forme U+XXXX. En voici
quelques exemples :
Les caractères de numéros compris entre 0 et 127 sont ceux du code ASCII. Ceux de code compris entre 160
et 255 sont ceux du code ISO 8859-1.
Unicode se contente de recenser, nommer les caractères et leur attribuer un numéro. Mais il ne dit pas
comment ils doivent être codés en informatique.
UTF-32 qui code chaque caractère sur 32 bits (soit quatre octets)
UTF-16 qui code chaque caractère sur 16 ou 32 bits (soit deux ou quatre octets)
UTF-8 qui code chaque caractère sur 8, 16, 24 ou 32 bits (soit un, deux, trois ou quatre octets).
Le plus couramment utilisé, notamment pour les pages Web, est UTF-8.
Un texte en UTF-8 est simple: il est partout en ASCII, et dès qu'on a besoin d'un caractère appartenant à
l'Unicode, on utilise un caractère spécial signalant "attention, le caractère suivant est en Unicode".
Par exemple, pour le texte "Bienvenue chez Sébastien !", seul le "é" ne fait pas partie du code ASCII. On écrit
donc en UTF-8:
Pour être rigoureux, on indique quand même au début du fichier que c'est un fichier en UTF-8 à l'aide de
caractères spéciaux:
Rédigé par : Mme TOUIL M. Page : 13
Ministère de l’Enseignement Supérieur et de la Recherche Scientifique
Université Alger 1
Faculté des sciences
Département Mathématiques Informatique
Et voilà !
L'UTF-8 rassemble le meilleur de deux mondes: l'efficacité de l'ASCII et l'étendue de l'Unicode. D'ailleurs
l'UTF-8 a été adopté comme norme pour l'encodage des fichiers XML. La plupart des navigateurs récents
supportent également l'UTF-8 et le détectent automatiquement dans les pages HTML.
Cette structure algébrique a été étudiée par le mathématicien anglais Georges Boole (1815-1864) pour
formaliser les règles de la logique des propositions. Elle a été publiée dans son ouvrage : « The Mathematical
Analysis of Logic » en 1847.
L’Algèbre de Boole traite des opérations et des règles applicables à l’ensemble réduit à deux(2)
variables {0,1} (correspondant respectivement à FAUX et VRAI).
L’Algèbre de Boole définit trois (3) opérations de base :
Deux (2) opérations binaires ‘+’ et ‘.’ Correspondant respectivement au OU et ET logique qu’on les
appelle aussi ‘disjonction’ et ‘conjonction’ respectivement. Ces deux opérations sont applicables sur
2 variables booléenne d’où leur noms « binaire »
Une (1) opération unaire (correspondant à la négation logique appelée aussi « non logique ».
Cette opération est applicable sur une seule variable d’où son nom « unaire »
Opérateur unaire (appliqué sur une variable) qui inverse la valeur d’une variable (0 devient 1 et 1
devient 0) ; il est représenté par une barre au-dessus de la variable.
Exemple : , il est représenté comme suit :
Opérateur binaire (appliqué sur deux variables) qui fait la somme logique entre deux variables, il
donne 1 si au moins une des variables en entrée est en état 1, il est représenté par +,
Exemple : A+B, il est représenté comme suit :
Opérateur binaire qui fait le produit logique entre deux variables, il retourne 1 si et seulement si les
deux variables en entrée sont à l’État 1, il est représenté par un point
Exemple : A.B, il est représenté comme suit :
Operateur binaire qui fait la négation de l’opérateur ET, il retourne 1 si au moins des variables en
entrée est à 0.
Exemple : non (A.B) est représenté par et il est représenté comme suit :
Operateur binaire qui fait la négation de l’opérateur OU, il retourne 1 si toutes les variables en entrée
sont à 0
Exemple : non (A+B) est représenté par et il est représenté comme suit :
Opérateur binaire qui vérifie si les deux variables en entrée sont différentes, il retourne 1 si et
seulement si une variable d’entrée égale à 1 et l’autre égale à 0.
Exemple : il est représenté comme suit :
Associativité
Comme avec les opérations habituelles, certaines parenthèses sont inutiles:
Commutativité
L'ordre est sans importance:
Distributivité
Idempotence
Éléments neutres
Absorption
Simplification
Complémentarité
et
Priorité
la négation (non) est prioritaire devant le ET , le ET est prioritaire devant le OU
Théorème d’involution :
Théorème d’inclusion :
Théorème d’allégement :
Théorème d’absorption :
Exemple : Si une TV possède N entrées et M sorties donc cette TV possède (N+M) colonnes
a b F(a,b)
0 0 0
0 1 1
1 0 0
1 1 0
Remarque :
Deux fonctions sont équivalentes si elles possèdent la même table de vérité
Exemple :
Soit la fonction booléenne f telle que : avec et sont des termes algébriques
2- Dans la combinaison, on remplace les 1 par les variables et les 0 par leurs compléments. Ainsi, chaque
combinaison va correspondre au produit logique de ses variables ou de leurs compléments.
3- La fonction sera la somme logique de tous les produits logiques déjà trouvés en 2).
Exemple :
Soit la fonction f représentée par la table de vérité suivante :
a B f(a,b) Terme Algébrique
0 0 1 On remplace le 1er 0 par et le 2ème 0 par
0 1 1 On remplace le 0 par et le 1 par
1 0 0
1 1 1 On remplace le 1er 1 par et le 2ème 1 par
Exemple :
Est un terme canonique puisqu’il contient les deux compléments des variables a et b.
Est un terme canonique puisqu’il contient les deux variables a et b .
Exemple :
Soient deux fonctions suivantes à 3 variables :
Et
1- On remarque que la fonction f1 est la somme de deux produits ( et ). F1 est dite de
forme canonique disjonctive ou de la première forme canonique (FC1). Les termes et
sont appelés mintermes.
2- On remarque aussi que f2 est le produit de deux sommes et . F2 est dite de
forme canonique conjonctive ou de la deuxième forme canonique (FC2). Les termes et
sont appelés maxtermes.
Par exemple : i=2 est le nombre décimal correspondant au nombre binaire 10, associé à la combinaison
des variables a et b, d’où
Exemple :
pour une fonction à 2 variables, on aura 22 =4 mintermes m0, m1, m2 et m3 suivants :
a b Mintermes
0 0
0 1
1 0
1 1
A b c Mintermes
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Par exemple : i=3 est le nombre décimal correspondant au nombre binaire 11 associé à la combinaison
des variables a et b, d’où
Exemple :
pour une fonction à 2 variables, on aura 22 =4 maxtermes m0, m1, m2 et m3 suivants :
a b Maxtermes
0 0
0 1
1 0
1 1
A b c Maxtermes
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Une fonction booléenne peut être exprimée sous forme algébrique à partir de sa table de vérité :
1- Pour obtenir l’expression logique sous la première forme canonique (FC1) (disjonctive), on établit
l’équation logique de la fonction f en sommant les mintermes pour lesquels la fonction (sortie) vaut
1.
2- Pour obtenir l’expression logique sous la deuxième forme canonique (FC2) (conjonctive), on établit
l’équation logique de la fonction en sommant les mintermes pour lesquels la fonction (sortie) vaut
0, puis on calcule .
Solution :
La fonction f est composée de 3 variables donc la TV possède 23=8 lignes (combinaisons possibles)
- Table de vérité :
a B C F(a,b,c)
0 0 0 0 , maxterme
0 0 1 0
0 1 0 0
0 1 1 1 ←
1 0 0 0
1 0 1 1 ←a
1 1 0 1 ←a
1 1 1 1 ←a
Calculons
4.7 Le chronogramme
C’est le graphe représentant l’évolution des variables d’entrée et de sortie au cours du temps, tels
que l’état supérieur représente le ‘1’ et l’état inferieur représente le ‘0’.
a 0 0 0 0 1 1 1 1
b 0 0 1 1 0 0 1 1
c 0 1 0 1 0 1 0 1
F(a,b,c) 0 0 0 1 0 1 1 1
Donc
En examinant la méthode de simplification algébrique, on remarque que cette dernière devient très
difficile si le nombre des variables est grand. La méthode de KARNAUGH est une technique de simplification
rapide.
Une table de KARNAUGH est une grille comportant un nombre de cases vides égal au nombre de
combinaisons des variables de la fonction booléenne qu’on se propose de simplifier.
Pour une fonction à une variable, la table comprend une seule case qui peut prendre la valeur 0 ou 1.
Pour une fonction à deux variables a et b, la table sera constituée de 22=4 cases. Dans la 1ère colonne
de cette table, on met les valeurs possibles pour la variable a, et dans la 1ère ligne, les valeurs
possibles pour la variable b.
Pour une fonction à n variables, la table sera constituée de 2n cases : une case est associée à chaque
état d’entrée ;
Chaque case contient la valeur de la fonction correspondant à l’état d’entrée associé à la case
Cette représentation est équivalente à celle de la table de vérité : c'est-à-dire qu’une ligne de la table
de vérité correspond à une case du tableau de KARNAUGH.
; On a
; Par commutativité
;
a\b 0 1
0 1 Cases adjacentes
1 1 1
Cases adjacentes
2- Simplification :
a- Essayer de regrouper les cases adjacentes qui comportent des 1
b- Essayer de faire des regroupements avec le maximum de cases (16, 8, 4, 2,1)
c- On s’arrête lorsqu’il y a plus de 1 en dehors des regroupements
d- On élimine les variables qui changent d’états
e- La fonction finale est égale à la somme des termes dont l’état des variables ne change pas à
f- Une ou plusieurs cases peuvent être communes à plusieurs regroupements
a\b 0 1
0 0 1
1 1 1
Donc or donc
a/b.c 00 01 11 10
0 1 0 0 1
1 0 1 1 1
a/b.c 00 01 11 10
0 1 0 0 1
1 0 1 1 1
Simplification :
Le tableau de Karnaugh ne représente que quatre variables au maximum, pour simplifier une fonction
f(a,b,c,d,e) de cinq variables il faut suivre les étapes suivantes :
Exemple :
Donc
Pour une fonction de six variables G (a,b,c,d,e,f) il suffit de suivre les mêmes étapes qu’avec cinq
variables sauf que la fonction est transformée de la manière suivantes :
G( , , , , , )= . .G( , , , ,1,1)+ . .G( , , , ,1,0)+ . .G( , , , ,0,1)+ . .G( , , , ,0,0)
Remarque : Au-delà de 6 variables, la méthode de Karnaugh n'étant plus valable, on utilise la méthode de
McClusky.