Cohen Julien Neville gabriel Le codage des nombres Cohen Julien Neville gabriel
Introduction Deux états possible: OUVERT ou FERME equivaut à 0 ou 1 0 ou 1 = chiffre binaire / booléen / bit(binay digit) Add your third bullet point here
I) La représentation des entiers naturels en différentes bases
1) Représentation en base 10 On utilise le système de numération décimale à position On dit que 10 constitue la base de notre système. Il s’explique simplement par le nombre de symboles graphiques, ou chiffres, dont nous disposons pour représenter nos nombres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Exemple: 3207 représente 3 milliers + 2 centaines + 0 dizaines + 7 unités. Soit 3207 = 3 x 103 + 2 x 102 + 0 x 101 + 7
2) Représentation en base 2 Il n’y a que 2 chiffres : 0 et 1 On utilise le système de numérations binaire à position (le principe reste le même qu’en base 10) Exemple: -10011 = 1 × 24 + 0 × 23 + 0 × 22 + 1 × 21 + 1 × 20 -10011 = 1 × 16 + 0 × 8 + 0 × 4 + 1 × 2 + 1 × 1 …c’est-à-dire 19 en base 10 -Le bit (ou chiffre) le plus à gauche est appelé bit de poids fort -Le bit (ou chiffre) le plus à droite est appelé bit de poids faible
3) Le système hexadécimal Il utilise 16 symbole en général les chiffres arabes pour les dix premiers chiffres et les lettres A à F pour les six suivants. Utilisé en électronique numérique et en informatique car il est très commode En effet, chaque chiffre hexadécimal correspond exactement à quatre chiffres binaires (ou bits), rendant les conversions très simples et fournissant une écriture plus compacte.
Ainsi, les trois bases que nous avons cité précédemment sont les plus utilisé et les plus courante en électronique numérique et en informatique. Il ne faut cependant pas négliger le fait qu’il existe une infinité de base.
II) Un peu de pratique
1) Dans l’ordinateur C’est le codage binaire qui est utilisé: Par exemple avec le nombre dont la représentation décimale est 59 : 59 = 1 x 32 + 1 x 16 + 1 x 8 + 0 x 4 + 1 x 2 + 1 x 1 59 = 1 x 25 + 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 59 = 1110112.
2) Conversions
3) Addition de nombres binaires Pour additionner deux nombres binaires on procède comme en base 10. 0+0=0 1+0=0+1=1 1+1=10 chaque fois qu’il y a 1+1, on écrit 0 et on retient 1. Par exemple :
4) Multiplication de nombres binaires Il suffit d'utiliser les quatre opérations principales dédiées à la multiplication à savoir : 0 x 0 = 0 0 x 1 = 0 1 x 0 = 0 1 x 1 = 1. Exemple :
III) Codage d’entiers relatifs Comment représenter à l’aide de bits les entiers positifs ET négatifs, sachant qu’en bonne machine totalement binaire, un processeur ne pige ni le signe plus, ni le signe moins ?
1) La représentation signe valeur absolue On pourrait utiliser un bit pour le signe et les autres bits pour la valeur absolue Signe valeur absolue Exemple : 610 = 000001102 , alors -610 = 1000110 Inconvénient : ce bit servant juste à déterminer le signe peut conduire à des résultats surprenant lors du traitement Exemple : 610 + −610 = −1210 (car 00000110+1000110=10001100) De plus Le nombre 0 se trouve représenté par deux valeurs distinctes : +0 (00000000) et -0 (10000000). Conséquence : : le plus grand entier relatif "codable" devient 127 (01111111), et le plus petit -127 (11111111). on ne peut plus parler de conversion entre binaire et base 10 !
2) Complément à deux Soit un nombre binaire N composé de p bits. En mathématique, on appellera complément à 1 de N le nombre noté 𝑁 tel que: N + 𝑁 = 2p − 1. Exemple : 1001012 + 0110102 = 1111112 = 26 – 1 Donc 1001012 est bien le complément à 1 de 0110102 On peut donc en déduire la relation suivante : −N = 𝑁 + 1 – 2p
3) La représentation biaisée (ou par excès) Elle consiste à considérer tout nombre binaire codé comme un entier non signé auquel on soustrait une constante, ou biais, définie selon le domaine de validité des entiers codés que l’on recherche. Exemple : 12910 = 100000012 avec la méthode positionnelle Or, le biais d’un octet est 128, car il correspond à la moitié du nombre de nombres codables sur un octet(256). L’écriture biaisée de 129 est donc : 10000001-10000000= +1
4) Récapitulatif Prenons pour exemple l’octet 10000001 Application : Comment le décoderiez-vous en base 10? Aucune idée! Il est foncièrement impossible de décoder un octet si l’on ignore le codage qui a servi pour le créer. En d’autres termes, un octet peut virtuellement coder n’importe quel entier ! C’est au processeur de connaître en permanence le type de codage qui a été utilisé pour coder les nombres qu’il manipule. Quelles sont les méthodes de codage que l’on a vu précédemment?
Nous avons vu jusqu’à présent 4 méthodes de codage : le codage par complément à deux, représentation signe-valeur absolue, représentation biaisée avec un biais égal à 128, numération positionnelle. Ainsi, si on ne précise pas le codage l’octet 10000001 pourrait être: −127 si on utilise le codage par complément à deux. −1 Si on utilise la représentation signe-valeur absolue. +1 Si on utilise la représentation biaisée avec un biais égal à 128 +129 Si on code en numération binaire positionnelle.
IV) Le codage des réels
Nous avons vu à jusqu’à présent comment coder des nombres relatifs, qu’en est-il des nombres réel ? Nombre réel = partie entière située à gauche de la virgule + éventuellement une partie décimale, située après celle-ci. On utilise le principe de la numération positionnelle Exemple : 23, 375 = 2×10+3×1+3×0.1+7×0.01+5×0,00 1 . . . ce qui revient à écrire : 23, 375= 2 × 101 + 3 × 100 + 3 × 10-1 + 7 × 10-2 + 5 × 10-3 De même en binaire : 10111, 011 =1×24+0×23+1×22+1×21+1×20+0×2-1+1×2-2+1×2-3 . . . soit : 10111, 011 =1×16+0×8+1×4+1×2+1×1+0×0, 5+1×0, 25+1×0, 125 . . . c’est-à-dire 10111, 0112 = 23, 37510
1) Numération binaire par virgule fixe Le problème : Comment coder la virgule car impossible de la coder par un bit! (problème qui ne se pose pas pour le codage du signe car placé toujours au même endroit) la machine doit convenir une fois pour toute d’une position immuable de la virgule. Les réels codés selon cette méthode seront alors dits représentés en virgule fixe. Voici la méthode de conversion en base 2 :
Convertissons 1234, 347 en base 2. (traitons d’abord la partie entière) 123410 = 100110100102 On transforme la partie décimale selon le schéma suivant : 0, 347 × 2 = 0, 694 0, 347 = 0, 0 . . . 0, 694 × 2 = 1, 388 0, 347 = 0, 01 . . . o, 388 × 2 = 0, 766 0, 347 = 0, 010 . . . 0, 766 × 2 = 1, 552 0, 347 = 0, 0101 . . . 0, 552 × 2 = 1, 104 0.347 = 0, 01011 . . . 0, 104 × 2 = 0, 208 0, 347 = 0, 010110 . . . 0, 208 × 2 = 0, 416 0, 347 = 0, 0101100 . . . 0, 416 × 2 = 0, 832 0, 347 = 0, 01011000 . . . 0, 832 × 2 = 1, 664 0, 347 = 0, 010110001 . . . 0, 664 × 2 = 1, 328 0, 347 = 0, 0101100011 . . . 0, 328 × 2 = 0, 656 0, 347 = 0, 01011000110 . . . On continue ainsi jusqu’à la précision désirée. . .Attention ! Un nombre à développement décimal fini en base 10 ne l’est pas forcément en base 2.