Technique simple de conversion binaire décimal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 495 fois - Téléchargée 19 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
Messages postés
4
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
20 avril 2010

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.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
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;
}
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
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.