TECHNIQUE SIMPLE DE CONVERSION BINAIRE DÉCIMAL

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 16 avril 2010 à 18:00
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
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51627-technique-simple-de-conversion-binaire-decimal

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 3982 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;
}
Rejoignez-nous