Technique simple de conversion binaire décimal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 497 fois - Téléchargée 20 fois

Contenu du snippet

Voili voilou un petit programme que je partage pour toutes les personnes qui comme moi débute en programmation, il s'agit d'un programme pour convertir un mot binaire de 8bits en décimal mais sans passer par une méthode de conversion dite "standard" j'ai voulu innové (peut etre que sa existe deja, surement mais je ne l'ai pas trouver dans la recherche de source).

Source / Exemple :


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

int main(void)
{
   short int tab [2][8] ={128,64,32,16,8,4,2,1,0,0,0,0,0,0,0,0};
   int i,j,k,x=0;

   printf("veuillez saisir le mot binaire:\n");
   for(i=0;i<8;i++) //boucle saisie
   {
       scanf("%d",&tab[1][i]);
   }

   for(j=0;j<8;j++) //boucle verification affichage
   {
       printf("case:%d = %d\n",j,tab[1][j]);
   }

    for(k=0;k<8;k++)
    {
        if(tab [1][k]==1)
        {
        x=x+tab[0][k];
        }
    }
    printf("le mot binaire =%d\n",x);
}

Conclusion :


un peu basique et amené a être améliorer sous peu dites moi ce que vous en pensez

A voir également

Ajouter un commentaire Commentaires
vivi168 Messages postés 4 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 20 avril 2010
20 avril 2010 à 20:55
mouai, c'est pas terrible terrible

d'abord t'es limité à 8 bits, et en plus l'utilisateur doit rentrer la totalité des 8 bits, même ceux qui servent à rien.
par exemple, je veux convertir 1101, je suis obligé d'écrire les quatre 0 inutiles avant. le pire, c'est que la saisie se fait ligne par ligne, bit par bit... c'est pas follement excitant.
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
16 avril 2010 à 23:54
Je trouve quand même que cette méthode est plus propre (elle gère n'importe quel int) :
---

#include <stdio.h>
#include <math.h>

int binaire(const char* str)
{int s_len strlen(str), res 0, val = 1;
char *s;
for (s=(char*)str+s_len-1;s>=str;s--)
{
if (*s=='1') res += val;
val<<=1;
}
return res;
}

int main(int argc, char* argv[])
{
char buf[11];
printf("Entrez un nombre en binaire : "); scanf("%10s",buf);
printf("Valeur en base 10 : %d\n",binaire(buf));
return 0;
}
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
16 avril 2010 à 18:00
C'est un peu juste pour une source. Tu aurais du poster dans le forum avec comme titre: Critiquez mon code.

Voici deux corrections.

La première est une écriture correcte de ton code:

#include <stdio.h>

int main(void)
{
short int tab[2][8] =
{
{128, 64, 32, 16, 8, 4, 2, 1},
{0, 0, 0, 0, 0, 0, 0, 0}
};
int i, j, k, x = 0;

printf("Veuillez saisir le mot binaire:\n");
for (i = 0;i < 8; ++i)
scanf("%hd", &tab[1][i]);

for (j = 0; j < 8; ++j)
printf("Case: %d = %hd\n", j, tab[1][j]);

for (k = 0; k < 8; ++k)
if (tab[1][k] == 1)
x += tab[0][k];

printf("Le mot binaire =%d\n", x);

return 0;
}

La deuxième est une écriture un peu mieux (Plus flexible, il est facile de changer la taille du mot binaire, on pourrait même se passer du tableau d'ailleurs):

#include <stdio.h>

#define MAX 8

int main(void)
{
short int tab[MAX] = {0};
int i, x = 0;

printf("Veuillez saisir le mot binaire:\n");
for (i = 0; i < MAX; ++i)
scanf("%hd", &tab[i]);

for (i = 0; i < 8; ++i)
printf("Case: %d = %hd\n", i, tab[i]);

for (i = 0; i < MAX; ++i)
if (tab[i] == 1) x +tab[i] * (i 0 ? 1 : 2 << (i - 1));

printf("Le mot binaire = %d\n", x);

return 0;
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.