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   -
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.

1 réponse

  1. seo610 Messages postés 705 Statut Membre 102
     
    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();
    }
    0
    1. seo610 Messages postés 705 Statut Membre 102
       
      idée d'optimisation?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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,
      0