C conversion decimal vers binaire [Fermé]

Signaler
-
Messages postés
1
Date d'inscription
lundi 23 février 2015
Statut
Membre
Dernière intervention
3 mars 2015
-
salut

juste pour info que je n'ai pas trouvé sur le web avant de venir vous concerter,
il existe en C une fonction permettant de convertir un nombre decimal en binaire?
ou faut-il se "taper" le code?

merci d'avance...

17 réponses

il y z cette metade aussi pour la conversion decimal => binaire sa utiliser de pointeur.

int conversion (int unsigned short Decimal)
{
int unsigned short valeur;
int tab[15];
int x=0;
int i;
int reste=;
int binaire=0;


valeur = Decimal;

while (valeur > 0)
{
reste = valeur%2 ;//calcul le reste
tab[x] = reste;
x++;
valeur = valeur/2;
}
for(i=x;i--;i>0)
{
binaire = binaire + tab[i]*10^i;
}
return binaire ;
}
22
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

j'ai exécuté ya des erreus pour (for(i=x;i--;i>0) et valeur=;

la valeur décimale (ABCH)16

i want help pleas ...la valeur décimale (ABCH)16
plutôt

valeur /= 2;

que

valeur = valeur/2;
#include <stdio.h>
#include <conio.h>

main()
{
int a,i=0,t[40],j=0;
printf("Saisissez un nombre a traduire \n");
scanf("%d",&a);
while(a>0){
t[i]=a%2;
a=a/2;
i++;
}
for(j=(i-1);j>=0;j--){
printf("%d",t[j]);}

getch();
}
y'a aussi les *toi qui en troisieme parametre prennet la base
char * itoa ( int value, char * buffer, int radix );

int nombre=7;
char temp[10];
atoi(itoa(nombre,temp,2));
message à l'intention de Tenebres il ne faut pas mettre de while mais plutot un for
car sinon tu peus faire qu'une foi ta conversion car le while risque d'etre vrai aprés.

ce programme fonctionne pour ceu que ça intéresse



int conversion (int unsigned short Decimal)
{
int unsigned short valeur;
int tab[15];
int x=0;
int i;
int reste=0;
int binaire=0;


valeur = Decimal;

for (i=0; i<8; i++)
{
reste = valeur%2 ;//calcul le reste
tab[x] = reste;
x++;
valeur = valeur/2;
}
for(i=x;i--;i>0)
{
binaire = binaire + tab[i]*10^i;
}
return binaire ;
}
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 497
Ceci dit à implémenter, ça tient sur une petite fonction:

char *en_binaire(int nombre)
{
         int i,j;
         char *binaire=(char *)malloc(sizeof(char)*33);
         binaire[32]='\0'; //Caractère de fin de chaîne
         i=0; //Compteur de décalage de bits
         j=31;  //Emplacement dans la chaine "binaire", on part de la fin

         while(i<32)
         {
                 /* On déplace chaque bit de vers la droite i puis on regarde si
                       le premier bit après le décalage est égal à 1. Le décalage
                       permet de déplacer chaque bit à la première position 
                       au fur et à mesure de la boucle */
                 if ( (nombre >> i) & 1)
                 {
                         binaire[j]=1;
                 }
                 else{
                         binaire[j]=0;
                 }
                 i++;
                 j--; 
          }
           
           return binaire; //Penser à libérer l'allocation de binaire un jour :-)
}


Je l'ai pas testé, mais l'intention y est :-)
J'ai pris une longueur de 33 pour la chaine. Avec gcc (donc peut être à changer en fonction des compilateurs), un int fait 32 bits, j'ai fait + 1 pour le caractère de fin de chaine.
Messages postés
25
Date d'inscription
mercredi 22 avril 2009
Statut
Membre
Dernière intervention
2 juin 2009
4
Oui, mais qui a l'allure du nombre binaire qu'on cherche ^^

PS : si ça marche pas, remplace for(i=x;i--;i>0) par for(i=x;i>0;i--)
et 10^i par pow(10, i) (avec #include <math.h>)
Messages postés
1
Date d'inscription
jeudi 8 octobre 2009
Statut
Membre
Dernière intervention
8 octobre 2009
3
voilà , tu peut trouver la solution ici => http://gabriel.braun.free.fr/CoursInfo/Codage/binaire.html
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
497
Salut,
Y a peut-être un lib en GPL qui permet de faire ça, mais pas dans la libc standard.
A+, crabs
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 501
Bonjour,

pour s'amuser voilà une variante en Perl
sub en_binaire {
           my $binaire = unpack("B32", pack("N",shift));
           $binaire =~ s/^0+(?=\d)//; # éliminer les zéros initiaux
            return $binaire;
}
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 271
Bonjour,

J'aime bien la variante en FORTH:

: B. base @ >R 2 base ! . r> base ! ;


et ensuite:

8 B.
affiche 100
9 b.
affiche 101

et ça marche depuis n'importe quelle base, comme l'hexadecimal:

hex A1 B.
affiche 1100001

A+
Messages postés
11
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2009
2
votre code ne marche pas de toute façon car vous faites une addition avec " binaire = binaire + tab[i]*10^i"
c'est vrai que dans les cases du tableau il y'a des nombres binaires ( 0 et 1) mais là vous calculez un nombre decimal...
je me permet de rouvrir ce post car j'ai voulu me servir de ce petit code mais une erreur survient lors de la compilation :

" error: conflicting types for "conversion" "

je passe en argument un int *p;
Messages postés
1
Date d'inscription
vendredi 9 octobre 2009
Statut
Membre
Dernière intervention
9 octobre 2009
2
Bonsoir, j'ai besoin de l'aide pour une conversion. je dois coder en C.
Je voudrais savoir l'algorithme qui permet de convertir un nombre decimal ( nbre fini de chiffres après la virgule) de la base decimale à la base binaire.
je sais que pour convertir par exple: (54,25) en base 2
il faut convertir la partie entiere en decimal.
puis pour la partie decimale on prend la partie decimale et on multiplie par 2.
et le resultat on multiple à nouveau par 2. ainsi de suite.
je ne vois pas cmt on fait pour saisir uniquement la partie décimale en C..
quelqu'un pourrait m'aider svp?
merci
Messages postés
7
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
12 avril 2015

Salut Miss,
Un peu tard, mais...

La partie décimale d'un nombre n'est jamais que le reste de la soustraction de sa partie entière à lui même...

Si tu préfère :

double a = ?; // ? = ton nombre décimal
long b = a; // là, b = partie entière de a
double c = a - b; // c sera la partie décimale de a

vérifie l'absence d'erreur des typages, au cas où je serais allé un peu vite
vérifie la justesse du truc au cas où a < 0, et si 0 < a < 1 (il me semble que si a<0, alors c doit être b-a plutôt)

Bonne journée,

Phi
Voilà le programme pour convertir du binaire en decimale
#include <stdio.h>
#include <math.h>
int main()

{
char S1[9];
double n;
int i;

printf("donner la valeur en binaire");
n=0;
scanf("%s",S1);
for (i=0;i<8;i++)



if(S1[i]=='1')
{
n=n+pow(2,7-i);
}


printf("la valeur decimal est de :%d",n);
return 0;

}
il donne tje la valeur de decimal est 0
Ma fonction : elle prend en paramètre le nombre a convertir et une chaine de 9 cases pour stocker le nombre binaire. Elle ne renvoie rien.

void DecToBin(const int nombre, char binaire[9])
{
const int d = 2;
const int t = 8;
char c1 = '1';
int q = nombre;
int r = 0;
int stop = 0;
int i = 0;

sprintf(binaire, "00000000");

if(nombre > 255)
{
printf("Nous ne pouvons pas gérer des nombres aussi grand\n");
stop = 1;
}

while(!stop)
{
r = q % d;
q /= d;
if(q == 0 || q == 1)
{
if(r == 1)
{
binaire[t - i - 1] = c1;
}
i ++;
if(q == 1)
{
binaire[t - i - 1] = c1;
}
stop = 1;
}
else
{
if(r == 1)
{
binaire[t - i - 1] = c1;
}

i ++;
}
}
}
Messages postés
2
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
5 juin 2012
3
voila mon code avec deux fonctions récursive :

#include<conio.h>
#include<iostream.h>
int binaire(int n);
int affiche(int i);
int T[50],i=0;
main(){
binaire(8);-841
getch();
}

int binaire(int n){
if(n>0){T[i]=n%2; i++; return binaire(n/2);}
affiche(i);
return 0;
}

int affiche(int i){
if(i>=0){cout<<T[i]; i--; affiche(i);}
return 0;
}

http://www.richaweb.com
Et dans l'autre sens prend un tableau avec le nombre binaire et revoie le nombre décimal

int BinToDec(const char binaire[9])
{
const int t = 8;
int i = 7;
int r = 0;
char c1 = '1';

while(i >= 0)
{
if(binaire[i] == c1)
{
r += pow(2, t - i - 1);
}
i --;
}
return r;
}
non tu n'a pas besoin de code il te suffi si tu as une calculatrice ordinaire tape ton nombre comme 123 et tape 2nd fonction + ou 2nd fonction /
t'as pas compris qu'on parlait de programmation C je pense... il demande comment faire en language C. A savoir s'il existe une finction C toute faite ou s'il faut en creer une.
Messages postés
1
Date d'inscription
lundi 23 février 2015
Statut
Membre
Dernière intervention
3 mars 2015

bonjour je voudrais savoir comment faire pour créer un programme en c qui permet de savoir le minimum-maximum et la position si l'utilisateur entre plusieurs nombres.