Fonction transformer décimal en binaire [C]
seo610
Messages postés
705
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je veux faire une fonction qui transformerais un nombre décimal ex:97 en binaire, mais que chaque paire du nombre binaire ex: 01100001 serait stoker dans un tableau ex: int binaire[4];
binaire[0]=01;
binaire[1]=10;
binaire[2]=00;
binaire[3]=01;
ce serait des nombres de 0 à 128, donc des octets.
merci.
je veux faire une fonction qui transformerais un nombre décimal ex:97 en binaire, mais que chaque paire du nombre binaire ex: 01100001 serait stoker dans un tableau ex: int binaire[4];
binaire[0]=01;
binaire[1]=10;
binaire[2]=00;
binaire[3]=01;
ce serait des nombres de 0 à 128, donc des octets.
merci.
1 réponse
-
bon, trouvé tout seul :
#include <stdio.h>
int main()
{
int i,a,b[8]={0,0,0,0,0,0,0,0};
puts("Entrez un nombre [0,256[ : ");
scanf("%d",&a);
getchar();
i=a;
b[0]=a/128;
if(b[0]==1){a=a-128;}
b[1]=a/64;
if(b[1]==1){a=a-64;}
b[2]=a/32;
if(b[2]==1){a=a-32;}
b[3]=a/16;
if(b[3]==1){a=a-16;}
b[4]=a/8;
if(b[4]==1){a=a-8;}
b[5]=a/4;
if(b[5]==1){a=a-4;}
b[6]=a/2;
if(b[6]==1){a=a-2;}
b[7]=a/1;
printf("\n\na = %d en decimale et %d%d%d%d%d%d%d%d en binaire.\n",i,b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7]);
getch();
}-
-
Effectivement, avant d'optimiser, il faudrait automatiser ton code. Un bon algorithme doit marcher pour tous les cas.
Pour la conversion en binaire, un algorithme simple et efficace est la méthode de la division successive. Le principe consiste à diviser le nombre en base 10 par 2 et à récupérer le reste (modulo). Et on continue, on divise le nouveau diviseur par 2 et on récupère reste. Les restes sont à mettre dans ta variable b.
Ainsi, tu auras ton nombre binaire.
Et plutôt que d'utiliser int b[8], utilise plutôt char b[9]. Non seulement ça prend moins de place, mais en plus tu pourras afficher le nombre simplement par : printf("s",b);
Cdlt,
-