Exercice langage C corrigé conversion binaire – décimal

  1. Idéalement, il faudrait s’assurer que le nombre entré est plus petit que 216. Ici, on ne le fait pas et si l’utilisateur entre un nombre plus grand, il sera tronqué.
  2. Pour convertir un nombre binaire en décimal, il suffit d’additionner les puissances de 2 correspondant à chacun des bits.
  3. Lorsqu’on décale les bits d’un tableau de binaires d’un cran vers la gauche, on multiplie le nombre par 2. Un déplacement d’un cran vers la droite correspond à une division entière par 2. On comprendra aisément ce qui se passe, si on applique le même décalage à un nombre en base 10.Notez que, lors d’un décalage des bits sur la gauche, les bits les plus à gauche sont perdus, et les nouveaux bits à droite sont égaux à 0. Il ne faut pas remettre au début les bits qui sont sortis du tableau à gauche. La même chose est valable lors d’un décalage à droite.
#include 

using namespace std;

int main(int argc, char ** argv)
{
  const int nb_bits = 16;
  bool binaire[nb_bits];
  int valeur;
  int valeur_apres_2_conversions;
  int puissance;

  cout << "Entrez un entier: ";
  cin >> valeur;

  // conversion decimal -> binaire
  int v = valeur;
  for (int i=0; i<nb_bits; i++)
    {
      binaire[i] = v % 2 == 1;
      v /= 2;
    }

  // affichage du nombre binaire
  for (int j=nb_bits-1; j>=0; j--)
    {
      cout << binaire[j];
      if (j % 4 == 0) // ajoute un espace chaque 4 bits
        cout << " ";
    }
  cout << endl;

  // conversion inverse
  puissance = 1;
  valeur_apres_2_conversions = 0;
  for (int i=0; i<nb_bits; i++)
    {
      valeur_apres_2_conversions += binaire[i] * puissance;
      puissance *= puissance;
    }

  cout << "Valeur retrouvee: " << valeur_apres_2_conversions << endl;

  // decalage des bits vers la gauche
  for (int i=nb_bits-1; i>0; i--)
    binaire[i] = binaire[i-1];
  binaire[0] = false;

  // affichage du binaire
  for (int j=nb_bits-1; j>=0; j--) 
    {
      cout << binaire[j];
      if (j % 4 == 0) // ajoute un espace chaque 4 bits
        cout << " ";
    }
  cout << endl;

  // conversion inverse
  puissance = 1;
  valeur_apres_2_conversions = 0;
  for (int i=0; i<nb_bits; i++)
    {
      valeur_apres_2_conversions += binaire[i] * puissance;
      puissance *= 2;
    }

  cout << "Valeur apres decalage: " << valeur_apres_2_conversions << endl;

  return 0;
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *