Conversion décimale binaire

Coincoinisback Messages postés 4 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 9 mai 2011 - 7 mai 2011 à 17:32
Coincoinisback Messages postés 4 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 9 mai 2011 - 8 mai 2011 à 20:51
Bonjour,
je dois écrire un programme qui affiche la conversion binaire d'un nombre entier (compris entre 0 et 4 294 067 295, codé sur 32 bits) mais l'algorithme que j'ai écris de fonctionne pas.
Malgrès toutes mes tentatives et recherches je n'ai toujours pas réussi.
Si quelqu'un pouvait m'aider à trouver les erreurs ce serait gentil!



#include <stdio.h>
#include <stdlib.h>

int convertisseur ()
{
int decimal;
int binaire = 2;
printf("Entrez le nombre entier : ");
scanf ("%d", &decimal);
while (binaire <= decimal)
binaire *= 2;
binaire /= 2;
while (binaire !=0)
{
if (binaire <= decimal)
{
printf("1");
decimal -= binaire;
}
else
printf("0");
binaire /= 2;
}
printf ("\n");
printf ("Le nombre binaire est %d");
return binaire;
}



MERCI!
A voir également:

2 réponses

pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
7 mai 2011 à 19:16
Bonjour, le problème vient du fait que tu souhaites calculer de 0 à 4 294 067 295, or sur 32bits, un entier va de -2 147 483 648 à 2 147 483 647, ce qu'il faut c'est donc un unsigned int qui va de 0 à 4 294 967 295. De plus en testant le code avec ce type, on s'aperçoit que de mettre long long diminue le temps de calcul de façon considérable.
Aussi, il ne faut pas oublier en mettant unsigned de faire : %u et non %d dans le scanf.

Au final :

#include <stdio.h>
#include <stdlib.h>

int convertisseur ()
{
    long long unsigned int decimal;
    long long unsigned int binaire = 2;
    printf("Entrez le nombre entier : ");
    scanf ("%u", &decimal);
    while (binaire <= decimal)
        binaire *= 2;
    binaire /= 2;
    while (binaire !=0)
    {
        if (binaire <= decimal)
        {
            printf("1");
            decimal -= binaire;
        }
        else
            printf("0");
        binaire /= 2;
    }
    printf ("\n");
    printf ("Le nombre binaire est %d");
    return binaire;
}



Cordialement,

Pop70
Coincoinisback Messages postés 4 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 9 mai 2011
8 mai 2011 à 20:51
Merci Pop70!
Rejoignez-nous