- 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é.
- Pour convertir un nombre binaire en décimal, il suffit d’additionner les puissances de 2 correspondant à chacun des bits.
- 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;
}
Pages: 1 2