Numération : arithmétique binaire 1 Bases numériques 1.1 Définitions Les codes sont utilisé en informatique. Ainsi, la reconnaissance d un code peut prendre différents aspect, comme le code barre d un article de supermarché, le code INSEE d un individu, le code ASCII... Plus particulièrement, les nombres sont codés dans un système informatique. En effet, un signal électronique, physique peut être codé comme reçu ou non, soit la symbolisation par deux chiffres 0 ou 1. 1.1.1 Bit Le mot fut utilisé pour la première fois par Claude Shannon dans un article publié en 1948. On attribue cependant son origine à John Wilder Tukey, mathématicien américain. Bit est une contraction des mots binary digit, ou également binary unit. Un bit peut prendre deux valeurs possibles, 0 ou 1. 1.1.2 Mot Un mot est un ensemble de bits agencés de sorte à représenter un objet dans un code. Le mot 0110000 représente le caractère 0 (zéro) en code Ascii, ou le nombre 48 dans la représentation dite décimale des entiers. 1.2 Système de numération 1.2.1 les chiffres Pour obtenir un système de numération dans une base B, il faut B symboles, ces symboles seront appelés chiffres. en base 2 : {0; 1} en base 10 : {0; 1; 2; 3; 4; 5; 6; 7; 8; 9} en base 16 : {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; A; B; C; D; E; F } 1.2.2 Écriture d un nombre décimal Une nombre N peut s écrire dans la base B de la manière suivante : N = ±[a n a n 1...a 2 a 1 a 0, a 1 a 2...a m ] (B) n + 1 chiffres forment la partie entière du nombre et m chiffres la partie fractionnaire du nombre. Ainsi N = ±a n B n + a n 1 B n 1 +... + a 2 B 2 + a 1 B + a 0 + a 1 B 1 + a 2 B 2 +... + a m B m Exemples : N = [158, 29] (10) ; on a N = 1 10 2 + 5 10 + 8 + 2 10 1 + 9 10 2 N = [1001, 101] (2) ; on a (en base 10) N = 1 2 3 + 1 + 1 2 1 + 1 2 3 = 9, 625 N = [15, 45] (16) ; on a (en base 10) N = 1 16 1 + 5 + 4 16 1 + 5 16 2 = 21, 26953125 N = [A5F ] (16) ; on a (en base 10) N = A 16 2 + 5 16 + F = 2655. S.Mirbel page 1 / 7
2 Changements de base Soit un nombre N à convertir d une base B à une base B (généralement la base B est la base 10). N = ±[a n a n 1...a 2 a 1 a 0, a 1 a 2...a m ] (B) Deux algorithmes permettent d effectuer le changement de base : On note E la partie entière de N : E = [a n a n 1...a 2 a 1 a 0 ] (B) et F la partie fractionnaire de N : F = [a 1 a 2...a m ] (B). 1. Algorithme de changement de base de la partie entière de N, E : Algorithm 1 changer E de base Entrées: E (soit a i, i 0, n, n N) bases B B. Sorties: E (soit r i, i 0, n, n N) q i E tantque q i > 0 faire r i+1 = reste(q i /B ) q i+1 = ent(q i /B ) Exercice-exemple : (a) convertir [6523] 10 en base 2. (b) convertir [523] 10 en base 16. 2. Algorithme de changement de base de la partie fractionnaire de N, F : Algorithm 2 changer F de base Entrées: F (soit a i, i 1, m, m N) bases B B, on écrira F = 0, a 1 a 2...a m. Sorties: F (soit r i, i 0, m, m N) q i F tantque q i > 0 faire r i+1 = ent(q i B ) q i+1 = frac(q i B ) Exercice-exemple : (a) convertir [0, 6975] 10 en base 2. (b) convertir [0, 6975] 10 en base 16. Remarque : Pour passer de la base 2 à la base 2 k en particulier à la base 16 = 2 4 on utilisera le principe de l exemple suivant : [10001101101] 2 = [100 0110 1101] 2 = [4 5 D] 16 = [45D] 16 S.Mirbel page 2 / 7
3 Opérations Pour la suite, nous nous placerons en base 2 ou 16. 3.1 Addition Soit N et N deux nombres entiers exprimés dans la base B, en n chiffres (exemple, en 4 bits, N = 0010 et N = 1011). L algorithme suivant permet de faire l opération : Algorithm 3 somme de deux nombres entiers N et N en base B Entrées: N (soit a i, i 1, n, n N) N (soit a i, i 1, n, n N). Sorties: S (soit s i, i 1, n, n N) s i = 0 tantque i n faire s i = a i + a i + s i si s i B alors s i = s i B s i+1 = 1 finsi 1. Reprenons l exemple en 4 bits avec N = 0010 et N = 1011 : retenue 1 Nombre N 0 0 1 0 Nombre N 1 0 1 1 Nombre S 1 1 0 1 2. Soit N = [25B] 16 et N = [DEF ] 16 : retenue 1 1 Nombre N 2 5 B Nombre N D E F Somme S 1 0 4 A 3. De la même manière, faire les sommes suivantes : [101] 2 + [100111] 2 puis [A9AE] 16 + [BBC87] 16 S.Mirbel page 3 / 7
3.2 Soustraction 3.2.1 Cas général Soit N et N deux nombres entiers exprimés dans la base B, en n chiffres (exemple, en 4 bits, N = 1110 et N = 1011). L algorithme suivant permet de faire l opération : Algorithm 4 différence de deux nombres entiers N et N en base B Entrées: N (soit a i, i 1, n, n N) N (soit a i, i 1, n, n N). Sorties: S (soit s i, i 1, n, n N) s i = 0 tantque i n faire si a i a i + s i alors s i = a i (a i + s i) sinon s i = a i + B (a i + s i) s i+1 = 1 finsi 1. Reprenons l exemple en 4 bits avec N = 1110 et N = 1011 : 2. Soit N = [D24] 16 et N = [8F E] 16 : Nombre N 1 1 1 (+B) 0 (+B) Nombre N 1 0 (+1) 1(+1) 1 Nombre S 0 0 1 1 Nombre N D 2 (+B) 4 (+B) Nombre N 8 (+1) F (+1) E Somme S 4 2 6 3. De la même manière, faire les différences suivantes : [10111] 2 [0111] 2 puis [EA9AE] 16 [BBC87] 16 S.Mirbel page 4 / 7
3.2.2 Application en informatique Dans cette sous-partie, les nombres seront exprimés en 16 bits, avec les chiffres 0 ou des 1. Pour coder les nombres négatifs, le premier bit à gauche est le signe du nombre 1 s il est négatif, et le reste est le nombre entier : 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 est le nombre [23] 10. Une première fausse idée serait de considérer le nombre suivant : 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 comme étant [ 23] 10. En effet avec ce raisonnement, la somme des deux nombres [23] 10 + [ 23] 10 ferait : 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 soit [ 46] 10. (nous préférerions trouver 0!) D autre part, avec cette méthode, on aurait 1000000000000000 = 0!) Une seconde idée est de prendre le complément à 2. Plutôt d écrire [ 1] 10 = 1000000000000001 on choisit d écrire [ 1] 10 = 1111111111111111. Ainsi [ 2 15 + 1] 10 = 1000000000000001 ; [ 2 15 + 2] 10 = 1000000000000010 ; [ 2 15 + 3] 10 = 1000000000000011 ; [ 2 15 + 4] 10 = 1000000000000100 ; [ 2 15 + 5] 10 = 1000000000000101 ; [ 2 15 + 6] 10 = 1000000000000111... (On utilise la somme des termes d une suite géométrique de raison 2.) Pour trouver l opposé d un nombre entier on utilise le complément à 2 : Algorithm 5 Opposé d un nombre N en binaire Entrées: N (soit a i, i 1, n, n N). Sorties: N (= N) (soit a i, i 1, n, n N). tantque i n faire si a i = 0 alors a i = 1 sinon a i = 0 finsi N N + 1 En 16 bits, l opposé de 23 est : 23 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 inversion 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 (+1) 1-23 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 Ainsi la somme de 23+(-23) donne : 23 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1-23 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 somme 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S.Mirbel page 5 / 7
il reste une retenue (à gauche) qui n est pas prise en puisque le nombre de bits est limité à 16. Le nombre obtenu est bien 0. Trouver l opposé du nombre [125] 10 en base 2 dans un système de 8 bits. Avec cette méthode se pose alors des problèmes de dépassement (quand une somme dépasse la limitation des bits imposés par la processeur). 3.3 Multiplication Le principe de distributivité existe dans une base B. Ainsi pour faire un produit de deux nombres N et N dans cette base, il suffit de poser l opération (faire l algorithme) comme vous l avez vu dans les classes de cours moyen avec la base 10. 1. Faire le produit de 7 par 5 en base 2 : 2. Faire le produit de 36 par 12 en base 2 : 3. Faire le produit de 45 par 19 en base 2. 1 1 1 7 1 0 1 5 1 1 1 0 0 0. 1 1 1.. = 1 0 0 0 1 1 35 1 0 0 1 0 0 3 6 1 1 0 0 1 2 1 0 0 1 7 2 1 0 0 1. 3 6. 1 1 0 1 1 0 0 0 0 4 3 2 Remarque : De la même manière, on peut poser les multiplications en base 16. 3.4 Division Comme pour la multiplication on applique nos connaissance de cours moyen (l algorithme) de la division en base 10 appliqué à la base 10. 1. Faire la division de 36 par 6 en base 2 : 1 0 0 0 1 1 1 0 1-1 0 1 1 1 1 0 0 1 1 1-1 0 1 0 1 0 1-1 0 1 0 0 0 On a alors l égalité d Euclide : 100011 = 101 111 + 0, le reste de la division est 0. 2. Faire la division de 25 par 12 en base 2 : 1 1 0 0 1 1 1 0 0-1 1 0 0 1 0 0 0 0 0 1-0 0 0 1 S.Mirbel page 6 / 7
On a alors l égalité d Euclide : 11001 = 1100 10 + 1, 1 est le reste de la division. 3. Faire la division de 72 par 5 en base 2. Vous donnerez le reste de la division, puis le résultat décimal de cette division. 4 Arrondi 4.1 Définition L arrondi d un nombre x est une valeur approchée de la valeur x, à une précision donnée n. Cet arrondi peut être approché par excès (par une valeur supérieure) ou par défaut (par une valeur inférieure). en base 10, l arrondi par excès de 2,76 à 0,1 (soit 10 1 ) est 2,8 et l arrondi par défaut à 0,1 est 2,7. en base 10, l arrondi par excès de 103 à 10 (soit 10 1 ) est 110 et l arrondi par défaut à 10 est 100. en base 2, l arrondi par excès de 1001,01 à 0,1 (soit 2 1 ) est 1001,1 et l arrondi par défaut à 0,1 est 1001,0. En informatique, les changements de base peuvent permettre les arrondis des nombres en base 10. En exercice, nous verrons que la capacité de mémoire physique d une machine peut amener à des erreurs de calculs que nous essaierons de comprendre. S.Mirbel page 7 / 7