[c++] comment convertir un int en base 2, 4 et 8 ?

comment convertir un int en base 2, 4 et 8 ? [c++] - C++ - Programmation

Marsh Posté le 27-02-2003 à 15:26:08    

voila tout est dit, merci  :jap:


Message édité par didier1809 le 27-02-2003 à 15:40:09

---------------
.
Reply

Marsh Posté le 27-02-2003 à 15:26:08   

Reply

Marsh Posté le 27-02-2003 à 15:40:03    

division successive par chacune de ses base +
tu retiens chaque fois le reste de la div obtenue,
par exemple dans un tableau pi tu afiche ce tableau a l'envers.
Tu peux te passer du tableau en utilisant une fct recurssive et en te servant de la pile, et en affichant le reste de la div juste après l'appel recurssif

Reply

Marsh Posté le 27-02-2003 à 15:42:24    

oula, ca c'est un peu trop compliqué pour moi, j'ai un nombre saisi au clavier, par ex 5, je doit le convertir dans une base 2, 4 et 8, mais pas en meme temps  ;)  
 
j'ai trouvé ce bout de code
 

Code :
  1. int base ;
  2. char Chaine[64];
  3. long ValDeci;
  4. long lBase;
  5. int  iNbTour;
  6. long Reste;
  7. long Rapport;
  8. lBase = 2;
  9. iNbTour = 0;
  10.  while (ValDeci >= lBase)
  11.  {
  12.    Rapport = ValDeci / lBase;
  13.    Reste = ValDeci % lBase;
  14.    Chaine[iNbTour ++] = '0' + Reste;
  15.    ValDeci = Rapport;
  16.  };
  17.  Chaine[iNbTour ++] = '0' + Rapport;
  18.  Chaine[iNbTour] = '\0';
  19.  cout << Chaine << endl;


---------------
.
Reply

Marsh Posté le 27-02-2003 à 15:44:55    

ben ce bout de code fait exactement ce que j ai decrit (sans l histoire de la pile)

Reply

Marsh Posté le 27-02-2003 à 15:46:19    

mais il m'affiche un 3 en exposant tout le temps  :(
 
edit : non, c'est bon, erreur de nom de variable  :pfff:
 
il me met aussi

conversion from 'long' to 'char', possible loss of data


 
pour ca :
 

Code :
  1. Chaine[iNbTour ++] = '0' + Reste;


Message édité par didier1809 le 27-02-2003 à 15:51:30

---------------
.
Reply

Marsh Posté le 28-02-2003 à 22:46:54    

Le char n'a pas la même portée que le long. Le compilo signale qu'on risque de perdre des données lors du calcul.
Si Reste vaut 1000, ça rentrera pas dans un char (sera tronqué modulo 256 ?) => perte d'infos donc grosse erreur sur calculs ultérieurs. Il n'est pas censé savoir que Reste ne dépassera pas (?) 256.
 
On doit pouvoir écrire (sauf erreur)
Chaine[iNbTour ++] = '0' + (char)Reste; Le long est transtypé en char (ce qui n'empêche pas les pb si trop grand !!). Ca fait juste taire le warning.

Reply

Marsh Posté le 28-02-2003 à 23:37:22    

merci  :jap:  
 
(je croit que ce code est de toi en plus  ;) )


---------------
.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed