Chapitre 2 sur 8

Nombres, bases et calculs

Laisser un commentaire

Instinctivement, nous pensons en base 10, 1 + 1 = 2, c’est une évidence. Cependant, la base 10 n’est qu’une base parmi d’autres. Nous l’avons vu, les machines utilisent le binaire, soit la base 2, et de nombreuses applications utilisent l’octal ou l’hexadécimal, respectivement bases 8 et 16.

Par ailleurs, même en base 10, plusieurs notations existent afin de facilement représenter des valeurs très grandes ou très petites. Les préfixes du SI sont connus de tous, ainsi, 10M est égal à 10 000 000 ou 1 x 107. Faisons donc un petit tour du monde numérique.

Différentes notations d’un nombre

L’écriture “normale” des nombres est d’avoir autant de rangs que l’ordre de grandeur représenté. Ainsi, cent possède deux zéros (trois rangs), un million six, un milliard neuf etc. On ajoute à cela un espacement pour mieux mettre en valeur les milliers – cela vaut d’ailleurs pour le français, car dans d’autres langues, ce sera plutôt une virgule. De cette manière cent mille s’écrira 100 000, c’est plus lisible que 100000.

Cependant, même avec l’ajout d’espaces, dès lors que l’ordre de grandeur à représenter est très élevé, ou à l’inverse très petit, écrire en accumulant les rangs atteint les limites de la lisibilité. Quel est ce nombre 100 000 000 000 ? Il s’agit de cent milliards, pas forcément évident.

Unités du SI

Les unités du système international (SI) sont très utilisées. On parle en effet tous les jours en kilomètres plutôt qu’en mètres ou en centimètres lorsque cela est plus adapté. De la même manière en informatique, on utilise les Mo, Go et To plutôt que les octets avec des ordres de grandeurs très élevés.

Cependant, indépendamment de ces unités, il est très fréquent qu’il faille tout de même travailler avec des ordres de grandeurs variés. Pour de très longues distances, domaine spatial par exemple, on continuera à parler en kilomètres.

Par ailleurs, certaines valeurs doivent être exprimée sans unité. C’est courant en programmation. On doit parfois parler en octet sans pouvoir préciser d’unité SI.

Écritures scientifique et ingénieur

Pour palier à ce problème, il est d’usage d’utiliser l’écriture scientifique. Cette notation représente les nombres en utilisant les puissances de 10 (dans le cas du décimal), tel que m x 10n, où m est la significande (aussi appelé mantisses) et n est l’exposant. Ainsi, 135 465 000 000 s’écrit 1,35465 x 1011. C’est plus facile à lire ainsi qu’à manipuler pour des opérations.

En notation scientifique, la mantisse est obligatoirement dans l’intervalle 1 - 9. Il existe une autre notation proche de la scientifique, il s’agit de la notation ingénieur. Cette dernière permet l’intervalle 1 - 999 pour la mantisse et requiert une puissance multiple de 3. Cela permet d’avoir des puissances qui collent aux unités du SI (3 = kilo, 6 = Méga etc). La grandeur précédemment exprimée s’écrit alors 135,465 x 109. On sait donc immédiatement que l’on est dans l’ordre de grandeur du milliard.

e.notation

Afin d’augmenter la compacité de ces deux notations, il existe une forme dite “e.notation”, cette dernière utilise le “e” minuscule ou majuscule pour représenter l’exposant. Deux milliards s’écrit alors 2e9. Ce qui est vraiment génial, c’est que de nombreux langages considèrent cette notation comme un chiffre valide.

De cette manière, en programmation, lorsque la valeur ne peut s’exprimer qu’en une valeur absolue, sans précision d’unité, il est bien plus pratique d’utiliser cette notation. 2Go = 2e9 octets. setTimeout en JavaScript prend des millisecondes, 1 minute est donc égale à 60000 pour cette fonction. 60e3 est quand même indiscutablement plus lisible !

Les différentes bases

Nous l’avons vu, l’homme raisonne en décimal tandis que la machine utilise le binaire. Alors, pourquoi plusieurs bases, et comment passer d’une base à une autre ?

Il y a plusieurs bases car certaines sont plus adaptées que d’autres à certains usages. Dans le chapitre précédent, nous avons mentionné que le binaire correspond à un état électrique pour l’ordinateur :

L’homme quant à lui, utilise naturellement ses doigts pour compter, et comme il en a 10, il se trouve que le système décimal semblait tout indiqué.

Afin d’éviter toute confusion et savoir dans quelle base on travaille, dès lors que l’on ne parle pas exclusivement en base 10, la convention veut que l’on précise la base en indice du nombre. Par exemple 10bin = 2dec. Si j’écrivais 1 + 1 = 10 sans préciser la base, vous penseriez que je parle en décimal et que je fume trop la moquette.

Le contexte permet évidemment de savoir quelles sont les valeurs sur lesquelles ont travaille, par conséquent, il n’est pas nécessaire de préciser en indice de chaque nombre sa base si c’est évident.

Enfin, sachez que les notations peuvent s’exprimer en lettres ou en chiffres : 2/bin, 8/oct, 10/dec et 16/hex.

Logique de comptage positionnel

Toutes les bases utilisent la notation positionnelle. Il s’agit de la règle déterminant que la valeur des chiffres composant un nombre dépendent de leur position. De droite à gauche, la valeur du chiffre est égale à valeur du chiffre x basenuméro du rang.

Lorsque la valeur du plus grand signe de la base est atteinte, on décale d’un rang en mettant le ou les chiffres de droite à nul (0) et celui de gauche à sa valeur non nulle la plus faible (1) s’il n’existait pas, ou on l’incrémente de 1 s’il existait et n’est pas à sa valeur maximale. Cette règle se vérifie en décimal comme en binaire :

Ainsi, dans le nombre 2465, le “2” représente deux mille car 2 x 103 = 2 x 1000 = 2000. Le nombre en entier peut donc s’écrire : (2 x 103) + (4 x 102) + (6 x 101) + (5 x 100).

Par conséquent, quelle que soit la base, la logique sous-jacente est la même. Donc si vous avez compris cela, vous savez maintenant compter dans toutes les bases. Pour l’exemple, convertissons 5, 60 et 65 en binaire :

Pour les bases plus grandes que le décimal, on utilise ensuite les lettres de l’alphabet. Par exemple, en hexadécimal, A vaut 10 et F vaut 15. La logique de comptage reste inchangée, Fhex vaut 15dec et donc F + 1 vaut 10hex (lire un-zéro base seize).

Conversion de base X à décimal et inversement

Avec la formule : valeur du chiffre x basenuméro du rang, vous voyez qu’il est très simple de passer d’une base au décimal. Pour l’opération inverse, nous avons procédé à la décomposition du nombre décimal en puissance de 2. La même opération est valable pour d’autres bases, il suffit d’utiliser des puissances de la base de travail.

Relations entre les bases

Vous savez maintenant passer d’une base binaire à une autre base et inversement. Vous vous êtes également rendu compte que certaines bases sont beaucoup plus verbeuses que d’autres. 2465 vaut 100110100001 en binaire mais 9A1 en hexa.

C’est pour cette raison que l’on aura tendance à convertir les valeurs plutôt que de les exprimer en binaire. À ce titre, certaines bases sont plus propices à la conversion que d’autres. Par exemple, l’octal et l’hexadécimal sont des bases puissances de la base 2, elles sont fortement liées au binaire, tout en étant plus facile a manipuler pour l’humain.

Ainsi, dans ces deux bases, l’écriture des nombres est facilement obtenue par regroupement des chiffres de l’écriture en base 2.

Grâce à ce lien mathématique, ces deux bases sont naturellement adaptées à la représentation de nombres binaires. Ainsi, si l’on prend au hasard le nombre binaire 1011100111, on peut facilement le convertir dans ces deux bases.

Pour l’octal, on groupe par trois en complétant par des zéros sur la gauche si nécessaire : 001 011 100 111. Maintenant que l’on sait faire les conversions, on sait rapidement que :

Naturellement, traduit en octal, on obtient 1347. C’est aussi simple que cela. En revanche, en décimal, cela vaudrait 743, je vous laisse le soin de faire le calcul.

Maintenant, si l’on veut convertir cette même valeur en hexadécimal, on groupe nos bits par quatre : 0010 1110 0111. On recommence ensuite la même gymnastique avec des nombres à quatre chiffres :

Notre valeur en hexadécimal est donc 2E7. Vous comprenez instantanément pourquoi on privilégie le travail avec ces deux bases. Qui plus est, si vous travaillez souvent avec ces dernières, vous connaissez ensuite très rapidement les valeurs des différentes combinaisons de triplets et quadruplets de bits.

D’ailleurs, les valeurs sont assez faciles à retrouver. En binaire, chaque rang vaut le double de son prédécesseur et ce sont des nombres qui nous sont familiers puisqu’ils correspondent aux capacités de mémoire. On a pu côtoyer ces valeurs pour les capacitées de RAM par exemple. Ainsi, depuis le rang zéro jusqu’au rang huit (donc un octet) :

Vous noterez que si l’on additionne l’ensemble, on trouve 255, soit la valeur maximale qu’un octet peut stocker.

Opérations arithmétiques en binaire

Pour les additions et les soustractions, c’est assez simple. La logique est exactement la même qu’en décimal. Vous posez votre opération, vous faites vos retenues etc. Quelle que soit la base, le fonctionnement est le même.

Si vous avez besoin d’un petit rafraichissement sur la manière de poser une opération, voici un cours de CE2 qui devrait vous remettre à niveau…

Addition

En binaire comme en décimal, 1 + 1 = 2. La différence est qu’en binaire, le chiffre 2 n’existe pas, on monte donc d’un rang directement, et comme il n’y a que 0 et 1, s’il y a retenue c’est toujours 1. Très simplement, les résultats sont donc les suivants :

Ainsi, décomposons la somme de 1011 et 1111 en une suite d’additions plus simples.

   1011
  +1111
   ––––
    +10 = <-- 1 + 1
    +0. = <-- 1 - 1
  +10.. = <-- 0 - 1
 +10... = <-- 1 + 1
= 11010

J’ai mis ici des points pour bien différencier le résultat de l’opération en elle-même et de son rang, mais on peut substituer les points par des zéros.

Soustraction

Toujours dans la même logique, la soustraction se fait comme en décimal. On soustrait sans oublier les retenues, lesquelles sont toujours de 1, le rang supérieur devient donc toujours 0. Pour la route, posons 110bin - 101bin.

 110
-101
 –––
   1 <-- on "emprunte" 1 au rang supérieur, l'opération est donc 10 - 1 = 1
  0. <-- comme on a "pris" le 1, l'opération est donc 0 - 0 = 0
 0.. <-- 1 - 1 = 0

Il n’y a rien de très complexe, dans l’ensemble, c’est plus facile qu’en décimal !

Multiplication

Dans la mesure où vous savez poser une multiplication, c’est encore plus simple qu’en décimal. Il n’y a en effet que des 0 et des 1 à multiplier. Les règles de l’arithmétique restant inchangé, si vous savez que :

Alors vous êtes tout bon ! On en pose une quand même pour la route. 101bin x 11bin.

    101
    x11
   ––––
    101 <-- on commence par multiplier 10 par le 1 du rang le plus bas
   101. <-- on décale d'un rang le résultat du bit de rang supérieur
 = 1111 <-- on fait la somme des deux

Division

Rien d’extrêmement compliqué non plus. Tout d’abord, il faut savoir poser une division, si vous ne savez plus, on est passé au level CM2, la maîtresse vous l’explique. Prenons un exemple.

101101|11
-11   |1111
 ––
0101 <-- 101 - 11 = 10, puis on "descend" le 1 du rang inférieur
 -11
  ––
  100 <-- même résultat, puis on descend le 0
  -11
   ––
    11 <-- 100 - 11 = 1, descente du 1
   -11
    ––
     0 <-- 11 - 11 = 0, la division est terminée, résultat 1111

Les bases dans la vie courante

Vous pensez peut-être quand dans la vie de tous les jours, seul le décimal est utilisé ? Réfléchissez-bien… L’expression du temps est un des exemples courant les plus complexes.

Les minutes sont constituées de 60 secondes et les heures de 60 minutes. Ces deux grandeurs sont donc en base 60 car 60 d’une de ces grandeurs est égal à 1 de la grandeur supérieure.

Ainsi, 0,5 heure, soit une demi-heure, est égal à 30 minutes. Nous sommes habitués à manier ces conversions donc cela nous semble ici naturel.

En revanche, un jour est constitué de 24 heures. Les heures sont donc en base 24. Les mois sont en base 30 ou 31 selon les mois (laissons tomber février et les années bissextiles).

Dans un autre domaine, presque aussi courant : les angles sont exprimés en degrés. La base est 360 car 360 degrés est égal à un tour complet. On utilise assez souvent cette mesure en CSS par exemple. De même, nous avons l’habitude de faire les conversions, on sait immédiatement que 1/4 de cercle correspond à 90 degrés.

Vous savez maintenant utiliser la représentation la plus appropriée, convertir une valeur d’une base à une autre et effectuer les opérations de bases sur les nombres binaires (et décimaux !).

Dans le prochain chapitre, nous allons voir comment la machine gère les virgules et les nombres signés (positif ou négatif) en binaire !

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```