Le code ci-dessous convertit un nombre décimal en binaire, l'affiche et fait la conversion inverse. Recopiez ce code dans un buffer d'Emacs, et essayez de le comprendre. Vous pouvez ensuite le compiler - il devrait fonctionner sans problème - et le tester.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#include using namespace std; int main(int argc, char **argv) { const int max_bits = 10; int decimal, binaire, original, n, bits; long puissance2, puissance10; cout << "Entrez un nombre entier: "; cin >> decimal; // calcul du nombre de bits n = decimal; bits = 0; while (n > 0) { bits++; n /= 2; } cout << decimal << " a " << bits << " bits." << endl; if (bits > 10) { cout << "Nous ne pouvons pas convertir de nombres plus grands que " << max_bits << " bits." << endl; return 0; } // conversion en binaire n = decimal; binaire = 0; for (int i=bits-1; i>=0; i--) { puissance2 = 1; for (int j=0; j<i; j++) puissance2 *= 2; puissance10 = 1; for (int j=0; j<i; j++) puissance10 *= 10; if (n / puissance2 > 0) { n = n - puissance2; binaire += puissance10; } } cout << decimal << " vaut '" << binaire << "' en binaire." << endl; // calcul du nombre de bits n = binaire; bits = 0; while (n > 0) { bits++; n /= 10; } cout << decimal << " a " << bits << " bits." << endl; // conversion de binaire en decimal original = 0; n = binaire; for (int i=bits-1; i>=0; i--) { puissance2 = 1; for (int j=0; j<i; j++) puissance2 *= 2; puissance10 = 1; for (int j=0; j<i; j++) puissance10 *= 10; if (n / puissance10 > 0) { n = n - puissance10; original += puissance2; } } cout << "Nombre original: " << original << endl; return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include using namespace std; // calcule a^b int puissance(int a, int b) { int resultat = 1; for (int i=0; i<b; i++) resultat *= a; return resultat; } // calcule le log entier de n en base 'base' int log_entier(int n, int base) { int resultat = 0; while (n > 0) { resultat++; n /= base; } return resultat; } // converti 'original', de taille 'bits' bits de la // base de depart a la base d'arrivee int conversion(int original, int bits, int base_depart, int base_arrivee) { int converti = 0; int puissance_depart; int puissance_arrivee; for (int i=bits-1; i>=0; i--) { puissance_depart = puissance(base_depart, i); puissance_arrivee = puissance(base_arrivee, i); if (original / puissance_arrivee > 0) { original -= puissance_arrivee; converti += puissance_depart; } } return converti; } int main(int argc, char **argv) { const int max_bits = 10; int decimal, binaire, original, bits; cout << "Entrez un nombre entier: "; cin >> decimal; // calcul du nombre de bits de 'decimal' bits = log_entier(decimal, 2); cout << decimal << " a " << bits << " bits." << endl; if (bits > 10) { cout << "Nous ne pouvons pas convertir de nombres plus grands que " << max_bits << " bits." << endl; return 0; } // conversion en binaire binaire = conversion(decimal, bits, 10, 2); cout << decimal << " vaut '" << binaire << "' en binaire." << endl; // calcul du nombre de bits bits = log_entier(binaire, 10); cout << decimal << " a " << bits << " bits." << endl; // conversion de binaire en decimal original = conversion(binaire, bits, 2, 10); cout << "Nombre original: " << original << endl; return 0; } |