Généralités
Presque tous les ordinateurs ne font pas le calcul en base 10. La base 10 est le plus souvent utilisée par les hommes, il faut apprendre à convertir les nombres d’une base de données à une autre.
Les systèmes de numération
Par définition est l’action ou la manière de représenter les chiffres. Il existe plusieurs systèmes de numération :
- Système décimal
- Système binaire
- Système octal
- Système hexadécimal
Ces systèmes sont généralement utilisés dans la programmation, pour la communication et l’ordinateur et sont utilisateur. Dans la base donnée α un nombre peut être exprimé sous la forme d’un polynôme. Supposons le nombre suivant X = (anan-1 … a0) la forme pronominale de se nombre est X = Σni=0aiαi
Ai : coefficient
α : la base
Exemple :
Soit X = 2955 sa forme pronominale est : X = 2x103 + 9x102 + 5x101 + 5x100
Le système décimal ou base 10
C’est le système le plus connu et le plus utilisé par les hommes. Il est constitué de 10 symboles ou chiffres appelés digits. Ces symboles sont : 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9
Le système binaire ou base 2
C’et un système composé de 2 symboles 0 et 1 encore appelé digits binaire (binary digit) d’où le nom bit. Ce système est à la base du langage machine (c’est le seul langage compréhensible par l’ordinateur).
Le système octal ou base 8
C’est un système intermédiaire constitué de 8 symboles qui sont : 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ;
Le système hexadécimal ou base 16
Le langage utilisé par l’ordinateur pour communiquer est le langage binaire. Or écrire une suite d’instruction dans le langage binaire devient parfois impossible car il faudra systématiquement aligner une suite de 0 et de 1. Ce qui est laborieux et augmente les possibilités d’erreur. C’est la raison pour laquelle le système hexadécimal intervient. Ce système dispose de 16 symboles dont 10 chiffres de 0 à 9 et 6 lettres A ; A ; B ; C ; D ; E et F.
A = 10 ; B = 11 ; C = 12 ; D = 13 ; E = 14 ; F = 15
Représentation de données numériques
Un nombre réel comporte généralement une partie entière et une partie décimale. Dans une base α un nombre X quelconque peut avoir la représentation suivante.
X = (anan-1 … a0, b1b2 … bn). Sa représentation polynômiale est X = Σni=0aiαi + Σmi=1biαi
Il existe une correspondance entre les bases 10 ; 2 ; 8 et 16.
Base 10 |
Base 2 |
Base 8 |
Base 16 |
0 |
0000 |
0 |
0 |
1 |
0001 |
1 |
1 |
2 |
0010 |
2 |
2 |
3 |
0011 |
3 |
3 |
4 |
0100 |
4 |
4 |
5 |
0101 |
5 |
5 |
6 |
0110 |
6 |
6 |
7 |
0111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
Pour convertir un nombre d’une base donnée à une autre on convertit la partir entière dans la base voulue et pour la partie décimale on convertit la partie fractionnelle dans la base voulue.
Conversion de la partie entière
Conversion de la base 10 à une base β
Il est possible de passer d’un nombre décimal à un nombre en base β en utilisant la division successive par β.
On divise successivement le nombre décimal par β en gardant les restes, on s’arrête lorsque le quotient devient nul. Le résultat est obtenu en prenant l’ordre inverse des restes.
Exemples :
Conversion d’un nombre en base 2.
(18)10 = (…)2
18 :2 = 9 et reste = 0
9 :2 = 4 et reste = 1
4 :2 = 2 et reste = 0
2 :2 = 1 et reste = 0
1 :2 = 0 et reste = 1
(18)10 = (10010)2
Conversion d’un nombre en base 8
(207)10 = (…)8
207 :8 = 25 et reste = 7
25 :8 = 3 et reste = 1
3 :8 = 0 et reste = 3
(207)10 = (317)8
Exercice :
Effectuer les conversions suivantes :
(3479)10 = (…)16 ; (145)10 = (…)2 ; (3007)10 = (…)16 ; (452)10 = (…)8
Conversion de la base β à la base 10
De façon inverse il est facile de passer d’un nombre β d’un nombre en base 10 pour multiplication successive de puissance de β : on multiplie chaque élément du nombre en base β élevé à une puissance. Les puissances sont comptées à partir de 0 en partant de la droite vers la gauche, puis on effectue la somme des résultats obtenus :
- Trouver la position de chaque chiffre constituant le nombre
- On multiplie chaque chiffre par β à la puissance de sa position
- Faire la somme des résultats obtenus.
Exemple :
1) (1100101)2 = (…)10
2.26 + 1.25 + 0.24 + 0.23 + 1.22 + 0.21 + 1.20 = 64 + 32 + 0 + 0 + 4 + 0 + 1 = (101)10
2) (203)8 = (…)10
2.8² + 0.81 + 3.80 = 128 + 3 = (131)10
3) (76)16 = (…)10
7.161 + 6.160 = 112 + 6 = (118)10
Exercice :
Effectuer les conversion suivantes :
- (145)8 = (…)10
- (452)8 = (…)10 = (…)16
- (546)16 = (…)10 = (…)8 = (…)2
- (458)16 = (…)10 = (…)2
- (DC48)16 = (…)10 = (…)8
- (100011)2 = (…)10 = (…)8
- (111001011)2 = (…)10 = (…)16
Conversion de la partie décimale
Une partie décimale y s’exprime sur la forme suivante
y=(0.b1b2...bn) = Σni=1biβ-i = b1/β1 + b2/β2 + … + bn/βn
En multipliant y par β on obtient une partie entière et une partie décimale
βy = b1 + b2/β1 + … + bm/βm-1
Formulons l’algorithme sous la forme suivante
d0 = y
d1 = D(βd0) et b1 = E(βd0) D : Partie décimale
d2 = D(βd1) et b2 = E(βd1) E : Partie entière et β :la base
.
.
.
.
La conversion de la partie décimale peut générer un nombre qui n’a pas une représentation fixe.
Exemple : (0.175)10 = (…)2
d0 = 0.175
2d0 = 0.35
d1 = 0.35 et b1 = 0
2d1 = 0.7
d2 = 0.7 et b2 = 0
2d2 = 1.4
d3 = 0.4 et b3 = 1
2d3 = 0.8
d4 = 0.8 et b4
2d4 = 1.6
d5 = 0.6 et b5 = 1
2d5 = 1.2
d6 = 0.2 et b6 = 1
2d6 = 0.4
d7 = 0.4 et b7 = 0
réponse : (0.175)10 = (0.0010110…)2
Exercice :
Effectuer les conversions suivantes :
- (250.55)10 = (…)2 = (…)8 = (…)16
- (1001001.011)2 = (…)10 = (…)13
- (1032.2)8 = (…)10 = (…)2 = (…)16
- (45EA.AB)16 = (…)10 = (…)8
Conversion de 2↔8 et 2↔16
Conversion de 2↔8
Etant donné un nombre en base 2 la conversion en base 8 se fait en subdivisant la représentation binaire en groupe de 3 bits en remplaçant chaque groupe par son chiffre correspondant en base 8. La subdivision procède du point décimal vers la gauche pour la partie entière et vers la droite pour la partie décimale. Dans chaque cas on peut avoir à compléter le dernier bit par zéro pour avoir 3 bits.
Exemple :
(11 001 011 . 111 001 11)2 = (313.716)8
Pour passer de la base 8 à la base 2 on remplace chaque chiffre par sa représentation binaire.
Exemple :
(4375.4012)8 = (1000 011 111 101 . 100 000 001 010)2
Conversion de 2↔16
Chaque symbole de l’alphabet hexadécimal correspond à un nombre de 4 bits. Ainsi on peut passer d’un nombre binaire à un nombre hexadécimal en subdivisant ces nombres binaires en groupe de 4kbits. Pour la partie entière on procède de la droite vers la gauche à partir du point décimal et pour la partie décimale on procède de la gauche vers la droite. Dans chaque cas on peut avoir à compléter le dernier quartet de bit par les 0 pour avoir 4 bits.
Exemple :
(100 0111 . 1100 0011 0)2 = (47.C30)16
Pour passer de la base 16 à la base 2 il suffit de convertir tout simplement chaque chiffre qui compose le nombre hexadécimal en binaire.
Exemple :
(13C)16 = (0001 0011 1100)2
Opération arithmétique
Les opérations sur les nombres binaires s’effectuent de la même façon que sur les nombres décimaux. Toutefois il ne faut pas oublier que les seuls symboles utilisés sont le 1 et 0.
Addition fondamentale
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 et on retient 1
Soustraction
0 – 0 = 0
0 – 1 = 1 et on retient 1
1 – 0 = 1
1 – 1 = 0
0 – 1 – 1 = 0 et on retient 1
Multiplication
Méthode 1
Dans cette méthode on utilise le même principe que dans la base 10. On multiplie le multiplicande par chacun des bits du multiplicateur, on décale à chaque fois les résultats intermédiaires et on effectue ensuite l’addition de ces résultats partiels.
Exemple :
1011 * 111
1011
*111
______
1011
1011
1011
______
1001101
Méthode 2
On multiplie le premier terme par la somme des puissances de 2 du second terme. Pour cela il suffit de décomposer le second terme sous forme de somme de puissance de 2.
Ex : 101011 = 100 000 + 1 000 + 10 + 1
Exemple :
1100 * 1101 = 1100(1000 + 100 + 1) = 1100 000 + 1100 00 + 1100 = 10011100
Division
Nous avons constaté que la multiplication était basée sur une succession d’addition. Inversement la division va être basée sur une succession de soustraction.
Exemple :
1100 : 100 = 11
Opération en complément
La difficulté rencontrée dans l’opération de soustraction a amené les concepteurs d’ordinateur à représenter les nombres négatifs sous une forme particulière appelée complément. L’opération A-B ou A et B sont des nombres positifs est remplacée par l’opération A + complément de B. dans une base donnée β il existe 2 formes de représentation en complément. Complément à β et complément à β-1.
Calcul du complément
Complément à β-1
Soit un entier A sur n chiffre dans la base β. Le complément à β-1 de A.
Cβ-1(A) = (βn-1)-A avec n : nombre de chiffre et A : entier
Exemple 1 :
β=10 et n=4
C9(1453) = (104-1) – 1453 = 10 000 - 1 – 1453 = 9 999 – 1 453 = 8546
Exemple 2 :
C9(391) = 999 – 391 = 608
Exemple :
C1(1011) = 24 – 1 – 1011 = 1111 – 1011 = 0100
C1(11101) = 25 – 1 – 11101 = 100 000 – 11 101 = 11 111 – 11 101 = 00 010
Pour trouver le complément à 1 d’un nombre binaire on remplace les 1 par les 0 et les 0 par les 1
C1(1011) = 0100
C1(11101) = 00010
Complément à β
Le complément à β de A est égal à sont complément à (β-1)+1. Cβ = βn-A
Exemple :
C10(27) = 10² - 2 = 100 – 27 = 73
C10(34500) = 105 – 34500 = 100 000 – 34 500 = 65 500
Le complément à β d’un nombre peut être obtenu directement de la manière suivante : de la droite vers la gauche si on rencontre les zéro on les recopie, dès qu’on rencontre le premier chiffre non nul on trouve son complément à β pour le reste des chiffres on trouve son complément à β-1
Exemple :
C10(4 103 000) = 5 897 000
C2(100 1101) = 0110011
C10(1 479) = 8521
C2(10001100100) = 01110011100
Soustraction en complément
soustraction avec les nombres sans signe
Soit à effectuer l’opération suivante x – y = x + complément(y)
On distingue deux cas :
- Si x≥y alors si la somme génère une retenue
- En complément à β on ignore cette retenue
- En complément à β-1 on ajoute cette retenue au résultat obtenu.
- Si x<y alors le résultat est négatif et la somme ne génère pas de retenue. Alors il faut e trouver le complément du résultat et le précéder du signe moins (-).
Exemple :
effectuons l’opération en complément à 10 et ensuite en complément à 9.
1372 – 345
C10 : 1372 – 0345 = 1372 + C10(0345) = 1372 + 9655 = 1027
1372 – 0345
C9 : 1372 + C9(0345) = 1372 + 9654 = 1027
Exercice :
Calculer en complément à 1 et en complément à 2.
10100 – 10011 = 10100 + C1(10011) = 10100 + 01100 = 00001
10100 – 10011 = 101000 + C2(10011) = 10100 + 01101 = 00001
Nombre avec signe
L’ordinateur se sert d’un bit pour représenter le signe avec la conversion 0 pour le signe positif et 1 pour le signe négatif. On se fixe toujours le nombre de bit utilisé pour la représentation des données. Soit n ce nombre de bit, le premier des n bits à partir de la gauche représente le signe. Les n-1 dernier bits représente le nombre en complément à 1 ou à 2.
Exemple : n = 8bits
0011111 = 63
11000000 = -63 en complément à 1
11000001 = -63 en complément à 2
Pour n bits on ne peut représenter que des nombres appartenant à cet intervalle.
[-(2n-1-1) ; 2n-1-1] en complément à 1
[-2n-1 ; 2n-1-1] en complément à 2
Exemples :
101110 et n = 6
[-31 ; 31] à 1 on a 01001 = -17
[-32 ; 31] à 2 on a 010010 = -18
1101011 et n = 7
[-63 ; 63] à 1 on a 0010100 = -20
[-64 ; 63] à 2 on a 0010101 = -21
Soit à effectuer A-B sur n bits cette opération revient à calculer A + complément(B) sur les n bits.
- En complément à 1 on additionne les deux nombres A et complément (B) y compris les bits de signe. S’il y’a retenu on la rajoute au résultat obtenu.
- En complément à 2 on additionne les deux nombres A et complément(B) y compris les bits de signe. S’il y’a retenu on l’ignore.
Exemples :
n = 4bits
-3 + 7
3 = 0011 et -3 = C2(3) = 1101 et 7 = 0111
R = 0100
n = 4bits
-3 – 4
-3 = C2(3) = 1101 et 4 = 0100 alors -4 = C2(4) = 1100
R = 1001
Représentation en virgule flottante
Beaucoup d’applications numériques manipulent les données autres que les entiers. Ces derniers sont appelées nombres flottant. De façon générale, un nombre flottant est une représentation interne d’un nombre réel et il permet ainsi de coder des grands nombres. A un nombre à virgule flottante on associe deux jeux de données :
- Le premier représente les chiffres significatifs du nombre c’est-à-dire la mantisse.
- Le second indique la puissance à laquelle la base est élevée : c’est l’exposant. Exemple 10E6
Il existe plusieurs représentations pour les nombres flottant.
Exemple : 13x106 = 0.13x108 = 1.3x107 = 1300x104
Il nous faut donc représenter ces nombres sous une forme normalisée afin d’obtenir une forme unique c’est-à-dire une représentation qui ne varie pas d’un matériel à un autre. Un nombre normalisé en virgule flottante est sous la forme : X = ±0.α1α2… αtβe
où 0 ≤ αi ≤ β-1
0 ≤ m < 1
α1 ≠ 0
Exemple :
27.38 = 0.273x10²
0.047x103 = 0.47x10²
Il existe plusieurs conventions de représentation :
- La première représentation est la représentation IBM. Cette représentation utilise 32 bits :
|S (1 bit) |Exposant(7 bits) |Mantisse (24 bits)| - La représentation IEE, elle utilise également 32 bits repartie comme suite :
|Exposant (7 bits) | S (1 bit) | Mantisse (24 bits)|
Représentation dans la norme IEE
La base utilisée dans la représentation est la base 16. Il convient donc de transcrire d’abord le nombre à représenter en base 16. Ensuite il faut le normaliser. Dans la norme IEE l’exposant de référence à savoir 64.
Exemple :
Soit à représenter le nombre suivant en virgule flottante dans la norme IEE : 27,38
- Conversion en base 16 : 1B.6147AE
- Normalisation : 0.1B6147AE x 10+2
- Calcul de l’exposant : 64 + 2 = (66)10 = (1000010)2
- Signe : 0
|1000 010|0 | 0001 1011 0110 0001 0100 0111| = 8 4 1 B 6 1 4 7
Comment retrouver la valeur décimale d’un nombre représenté en virgule flottante dans la norme IEE
On retrouve dans un vidage de fichier les valeurs hexadécimales suivantes (84163852)16
|1000010|0| 0001 0110 0011 1000 0101 0010|
- S = 0 (nombre positif)
- E = (1000010)2 = (66)10
- Décalage : 66 – 64 = 2
- 0001 0110 0011 1000 0101 0010 = 1 6 3 8 5 2 alors X = +0.163852 x 16²
- Le décalage X = (16.3852)16
- En base 10 : X = 1x161 + 6x160 + 3x16-1 + 8x16-2 + 5x16-3 + 2x16-4
X = 16 + 6 + 3/16 + 8/16² + 5/163 + 2/164
X = (22,22)10
Exercice :
1- Représenter en IEE
- (27.75)10
- (34.675)10
- (-25.99)10
- (0.0017)10
2- Décoder
- 512AB017
- 1A3B1468