VIVEZ LE
FOOTBALL !

Posez votre question Signaler

C conversion decimal vers binaire

frizou - Dernière réponse le 23 févr. 2012 à 19:50
salut

juste pour info que je n'ai pas trouvé sur le web avant de venir vous concerter,
il existe en C une fonction permettant de convertir un nombre decimal en binaire?
ou faut-il se "taper" le code?

merci d'avance...
Lire la suite 

C conversion decimal vers binaire »

22 réponses
Réponse
+12
moins plus
il y z cette metade aussi pour la conversion decimal => binaire sa utiliser de pointeur.

int conversion (int unsigned short Decimal)
{
int unsigned short valeur;
int tab[15];
int x=0;
int i;
int reste=;
int binaire=0;


valeur = Decimal;

while (valeur > 0)
{
reste = valeur%2 ;//calcul le reste
tab[x] = reste;
x++;
valeur = valeur/2;
}
for(i=x;i--;i>0)
{
binaire = binaire + tab[i]*10^i;
}
return binaire ;
}
oualid lamti - 19 nov. 2011 à 16:18
la valeur décimale (ABCH)16
oualid lamti - 19 nov. 2011 à 16:19
i want help pleas ...la valeur décimale (ABCH)16
Polo31 - 23 févr. 2012 à 19:12
plutôt

valeur /= 2;

que

valeur = valeur/2;
Ajouter un commentaire
Réponse
+8
moins plus
y'a aussi les *toi qui en troisieme parametre prennet la base
char * itoa ( int value, char * buffer, int radix );

int nombre=7;
char temp[10];
atoi(itoa(nombre,temp,2));
Ajouter un commentaire
Réponse
+4
moins plus
message à l'intention de Tenebres il ne faut pas mettre de while mais plutot un for
car sinon tu peus faire qu'une foi ta conversion car le while risque d'etre vrai aprés.

ce programme fonctionne pour ceu que ça intéresse



int conversion (int unsigned short Decimal)
{
int unsigned short valeur;
int tab[15];
int x=0;
int i;
int reste=0;
int binaire=0;


valeur = Decimal;

for (i=0; i<8; i++)
{
reste = valeur%2 ;//calcul le reste
tab[x] = reste;
x++;
valeur = valeur/2;
}
for(i=x;i--;i>0)
{
binaire = binaire + tab[i]*10^i;
}
return binaire ;
}
Ajouter un commentaire
Réponse
+3
moins plus
Ceci dit à implémenter, ça tient sur une petite fonction:

char *en_binaire(int nombre)
{
         int i,j;
         char *binaire=(char *)malloc(sizeof(char)*33);
         binaire[32]='\0'; //Caractère de fin de chaîne
         i=0; //Compteur de décalage de bits
         j=31;  //Emplacement dans la chaine "binaire", on part de la fin

         while(i<32)
         {
                 /* On déplace chaque bit de vers la droite i puis on regarde si
                       le premier bit après le décalage est égal à 1. Le décalage
                       permet de déplacer chaque bit à la première position 
                       au fur et à mesure de la boucle */
                 if ( (nombre >> i) & 1)
                 {
                         binaire[j]=1;
                 }
                 else{
                         binaire[j]=0;
                 }
                 i++;
                 j--; 
          }
           
           return binaire; //Penser à libérer l'allocation de binaire un jour :-)
}


Je l'ai pas testé, mais l'intention y est :-)
J'ai pris une longueur de 33 pour la chaine. Avec gcc (donc peut être à changer en fonction des compilateurs), un int fait 32 bits, j'ai fait + 1 pour le caractère de fin de chaine.
Ajouter un commentaire
Réponse
+1
moins plus
Salut,
Y a peut-être un lib en GPL qui permet de faire ça, mais pas dans la libc standard.
A+, crabs
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour,

pour s'amuser voilà une variante en Perl
sub en_binaire {
           my $binaire = unpack("B32", pack("N",shift));
           $binaire =~ s/^0+(?=\d)//; # éliminer les zéros initiaux
            return $binaire;
}
mpmp93- 9 mai 2011 à 09:47
Bonjour,

J'aime bien la variante en FORTH:

: B. base @ >R 2 base ! . r> base ! ;


et ensuite:

8 B.
affiche 100
9 b.
affiche 101

et ça marche depuis n'importe quelle base, comme l'hexadecimal:

hex A1 B.
affiche 1100001

A+
Ajouter un commentaire
Réponse
+1
moins plus
votre code ne marche pas de toute façon car vous faites une addition avec " binaire = binaire + tab[i]*10^i"
c'est vrai que dans les cases du tableau il y'a des nombres binaires ( 0 et 1) mais là vous calculez un nombre decimal...
Ajouter un commentaire
Réponse
+1
moins plus
Oui, mais qui a l'allure du nombre binaire qu'on cherche ^^

PS : si ça marche pas, remplace for(i=x;i--;i>0) par for(i=x;i>0;i--)
et 10^i par pow(10, i) (avec #include <math.h>)
Ajouter un commentaire
Réponse
+1
moins plus
je me permet de rouvrir ce post car j'ai voulu me servir de ce petit code mais une erreur survient lors de la compilation :

" error: conflicting types for "conversion" "

je passe en argument un int *p;
Ajouter un commentaire
Réponse
+1
moins plus
voilà , tu peut trouver la solution ici => http://gabriel.braun.free.fr/CoursInfo/Codage/binaire.html
Ajouter un commentaire
Réponse
+1
moins plus
Bonsoir, j'ai besoin de l'aide pour une conversion. je dois coder en C.
Je voudrais savoir l'algorithme qui permet de convertir un nombre decimal ( nbre fini de chiffres après la virgule) de la base decimale à la base binaire.
je sais que pour convertir par exple: (54,25) en base 2
il faut convertir la partie entiere en decimal.
puis pour la partie decimale on prend la partie decimale et on multiplie par 2.
et le resultat on multiple à nouveau par 2. ainsi de suite.
je ne vois pas cmt on fait pour saisir uniquement la partie décimale en C..
quelqu'un pourrait m'aider svp?
merci
TriFidE- 23 avril 2011 à 11:50
Salut Miss,
Un peu tard, mais...

La partie décimale d'un nombre n'est jamais que le reste de la soustraction de sa partie entière à lui même...

Si tu préfère :

double a = ?; // ? = ton nombre décimal
long b = a; // là, b = partie entière de a
double c = a - b; // c sera la partie décimale de a

vérifie l'absence d'erreur des typages, au cas où je serais allé un peu vite
vérifie la justesse du truc au cas où a < 0, et si 0 < a < 1 (il me semble que si a<0, alors c doit être b-a plutôt)

Bonne journée,

Phi
Ajouter un commentaire
Réponse
+1
moins plus
Voilà le programme pour convertir du binaire en decimale
#include <stdio.h>
#include <math.h>
int main()

{
char S1[9];
double n;
int i;

printf("donner la valeur en binaire");
n=0;
scanf("%s",S1);
for (i=0;i<8;i++)



if(S1[i]=='1')
{
n=n+pow(2,7-i);
}


printf("la valeur decimal est de :%d",n);
return 0;

}
Ajouter un commentaire
Réponse
+0
moins plus
Ma fonction : elle prend en paramètre le nombre a convertir et une chaine de 9 cases pour stocker le nombre binaire. Elle ne renvoie rien.

void DecToBin(const int nombre, char binaire[9])
{
const int d = 2;
const int t = 8;
char c1 = '1';
int q = nombre;
int r = 0;
int stop = 0;
int i = 0;

sprintf(binaire, "00000000");

if(nombre > 255)
{
printf("Nous ne pouvons pas gérer des nombres aussi grand\n");
stop = 1;
}

while(!stop)
{
r = q % d;
q /= d;
if(q == 0 || q == 1)
{
if(r == 1)
{
binaire[t - i - 1] = c1;
}
i ++;
if(q == 1)
{
binaire[t - i - 1] = c1;
}
stop = 1;
}
else
{
if(r == 1)
{
binaire[t - i - 1] = c1;
}

i ++;
}
}
}
Ajouter un commentaire
Réponse
+0
moins plus
Et dans l'autre sens prend un tableau avec le nombre binaire et revoie le nombre décimal

int BinToDec(const char binaire[9])
{
const int t = 8;
int i = 7;
int r = 0;
char c1 = '1';

while(i >= 0)
{
if(binaire[i] == c1)
{
r += pow(2, t - i - 1);
}
i --;
}
return r;
}
Ajouter un commentaire
Réponse
-1
moins plus
non tu n'a pas besoin de code il te suffi si tu as une calculatrice ordinaire tape ton nombre comme 123 et tape 2nd fonction + ou 2nd fonction /
Ajouter un commentaire
Ce document intitulé « C conversion decimal vers binaire » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?