- 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; }