Un tutoriel sur la conversion binaire/décimale.

Objectif.

Le but de ce tutoriel est d'expliquer comment sont codés les nombres en binaire.

Introduction.

  1. Décrire des nombres en binaire.

    (voir le texte "tout a un reflet numérique" pour une introduction complète) Le tableau suivant donne les 10 premiers nombres en base 10 dans la colonne du milieu et leur représentation binaire dans la colonne de droite :
    Si nous observons bien ce codage, nous constatons qu'il est le résultat d'un calcul, montré dans la colonne de gauche. Le codage binaire d'un nombre (que nous, humains, écrivons quasiment toujours en base 10, en utilisant 10 chiffres), est ce même nombre, mais écrit en base 2, avec 2 chiffres 0 et 1.
  2. Du codage binaire au nombre entier positif..

    Voici le calcul qui permet de retrouver un nombre à partir de son code binaire : additionner les bits, chacun multiplié par la puissance de deux qui lui correspond, comme ci-dessous, donne le nombre en base 10. retrouver le nombre 9 à partir de son code binaire:
    • À la première ligne, nous avons multiplié respectivement par 1, 2, 4, 8 de droite à gauche les bits qui représentent 9.
    • À la seconde ligne, nous nous sommes aperçus que 1, 2, 4, 8 sont en fait les puissances de 2 : 20,21,22 ..
    • À la troisième ligne, nous factorisons 2 autant que possible ; cette écriture avec ses parenthèses bien placées nous montre qu'il suffit de multiplier par deux puis d'additionner les bits de gauche à droite pour trouver le nombre en base 10.
    Voilà donc un calcul, une méthode mécanique, bref un algorithme, qui permet de passer du codage binaire au nombre dans sa représentation usuelle.
  3. Du nombre entier positif à son codage binaire.

    Réciproquement, il existe un calcul pour obtenir le code binaire de n'importe quel nombre entier. Si nous notons 9 % 2 = 1 le reste de la division par 2 de 9 ou 4 % 2 = 0 le reste de la division de 4 par 2, etc., alors le calcul suivant, où nous calculons successivement le reste de la division par deux puis divisons par deux nous donne... le codage binaire du nombre 9 :
  4. Calculer directement sur les nombres binaires.

    Nous pouvons donc représenter des nombres entiers positifs par la suite de bits de leur représentation binaire. Ce codage est très précieux, car il permet de faire directement des opérations sur ces nombres. Par exemple, additionner deux entiers positifs revient à additionner leur représentation binaire : on obtient directement le codage binaire du résultat. De même pour toutes les autres opérations numériques, pour comparer ces entiers entre eux, etc.
    Donc toutes les valeurs numériques sont non seulement stockées en binaire, mais aussi manipulées en binaire dans l'ordinateur.
  5. Représenter des nombres entiers négatifs et positifsde toute taille et des nombres décimaux.

    Tout ceci marche aussi pour des nombres plus grands, plus compliqués et d'autres objets numériques (images, sons, ..) comme cela vous est expliqué dans le texte "tout a un reflet numérique" à notre disposition.
  6. Une activité sans ordinateur est disponible ici.

Travail proposé.

  1. Ecrire et programmer l'algorithme de conversion binaire -> décimal.

    • A partir de la description du passage du codage binaire au nombre entier positif donnée ci-dessus, compléter l'algorithme suivant, écrit en "pseudo-code":
      Entrée: b[0],b[1],b[2],b[3] les quatres bits du nombre à convertir
      Sortie: n le nombre convertir en décimal.
      Algorithme:
          Initialiser n = 0;
          Pour i = 0 à 3 faire:
              n = [ah là: c'est à vous de compléter !!!]
      Résultat: Le nombre n contient la valeur décimale.
    • Traduire maintenant l'algorithme en programme à partir de l'exemple suivant:

      // // Tableaux des bits du nombre à convertir en décimal

      int bits[] = {1, 0, 1, 0};

      // // Valeur du nombre en décimal

      int r;

      // A vous d'écrire le code !!!

      echo("Le nombre décimal est: "+n);
      et essayer avec d'autres valeurs de bits[].
      Attention à bien faire la calcul de "droite à gauche", en commençant par le bit de poids faible et en finissant par le bit de poids fort. Ici le nombre 1, 0, 1, 0 doit donner 8 + 2 = 10 mais si nous considérons les bits à l'envers (c'est à dire comme si c'était 0, 1, 0, 1 cela va donner . . un autre nombre).
  2. Ecrire et programmer l'algorithme de conversion décimal ->> binaire.

    A partir de la description du passage du nombre entier positif au codage binaire, écrire
    • L'algorithme de division en pseudo-code.
    • Un programme qui utilisera, par exemple, l'instruction:
          echo("Digit numéro "+i+" = "+(n % 2));
      pour donner le digit numéro i (où i est un entier à définir) du nombre décimal.
    • Reprendre le même programme mais cette fois ci en utilisant un tableau, pour stocker les bits calculés, puis ajouter le code
          for(inti = 0; i < bits.length; i++) {
              echo("Digit numéro "+i+" = "+bits[i]);
          }
  3. Calculer directement sur les nombres binaires.

    Nous allons considérer deux nombres binaires:

    // // Tableaux des bits du nombre à convertir en décimal

    int bits1[] = {1, 0, 1, 0};
    int bits2[] = {0, 1, 0, 0};

    // // Tableaux des bits du résultat

    int bits0[] = new int[4];
    et à nous d'écrire l'algorithme qui permette de les additionner:
    • en binaire sans les reconvertir en décimal,
    • en utilisant la boucle:
          for(inti = 3; i >= 0; i--) {

      // // A compléter

          }
      pour bien calculer de droite à gauche,
    • en tenant bien compte de la retenue,
    • en mettant le résultat dans le tableau bits0.
    • en affichant un message d'erreur si le résultat est plus grand que 15 car . . 4 bits ne suffisent plus pour coder le résultat.
    Si le résultat est plus grand que 15, il y a un débordement (un overflow) et le calcul devient . . faux. Dans ce cas notre programme "hurle": il émet une erreur. Il se passe exactement la même chose dans la calculette ou dans l'ordinateur: si le nombre est trop grand (plus de environ 2 milliards pour les nombres entiers et plus de environ 1078 pour les nombres décimaux) une erreur est générée.

Remarques.

  1. A propos de ce tutoriel.

    Ce tutoriel est une idée originale de Laurent Mongiat, Professeur de Physique en 2nd Mesures Physiques et Informatique au Lycée .