programme pour transformer un entier en binaire

programme pour transformer un entier en binaire - Programmation

Marsh Posté le 26-11-2001 à 15:52:47    

Salut tout le monde, j'ai un travail pour l'ecole ou je dois transformer un entier saisi au clavier en binaire....mais comme je debute je ne sais pas trop par ou et comment commencer si vous pouviez me donner un coup de main ca serait sympa...
 
A+

Reply

Marsh Posté le 26-11-2001 à 15:52:47   

Reply

Marsh Posté le 26-11-2001 à 15:54:25    

en quel langage !?
en plus, ça c plutot un truc mathématique qu'un truc de prog...
tu sais le faire mathématiquement !?

Reply

Marsh Posté le 26-11-2001 à 15:56:11    

C'ets pas dur, faut diviser par 2 et prendre le reste. Si par exemple tu prends 53 :
 
53 / 2 = 26 reste 1
26 / 2 = 13 reste 0
13 / 2 = 6  reste 1
6  / 2 = 3  reste 0
3  / 2 = 1  reste 1
(on s'arrete la)
 
PS : C'est un mauvais exemple, vu que ca fait 10101 dans les deux sens, mais t'as saisi le principe ...
 
ensuite, tu reprends les restes en commencant par celui du bas, soit 10101 ... et c'est tout :)

 

[edtdd]--Message édité par Gonzoide--[/edtdd]

Reply

Marsh Posté le 26-11-2001 à 16:00:39    

Excusez moi.....c'est en C
 
 
//merci Gonzoide

Reply

Marsh Posté le 26-11-2001 à 16:04:58    

facile :)
 
on peut toujours donner l'algo générale
 
pour la partie entière -> divisions successives
pour la partie fractionnaire -> multiplications successives
 
11.8125 = 1011.1101
 
11 / 2 = 5 reste 1
5 / 2 = 2 reste 1
2 / 2 = 1 reste 0
1 / 2 = 0 reste 1
 
partie entière = 1011
 
.8125 * 2 = 1.625 on garde le 1
.625 * 2 = 1.25 on garde le 1
.25 * 2 = 0.5 on garde le 0
.5 * 2 = 1.0 on garde le 1
 
partie fractionnaire = 1101
 
Mogi.

Reply

Marsh Posté le 26-11-2001 à 16:06:13    

Gonzoide a écrit a écrit :

C'ets pas dur, faut diviser par 2 et prendre le reste. Si par exemple tu prends 53 :
 
snip...
 




 
trop rapide Gonzoide ;)

Reply

Marsh Posté le 26-11-2001 à 16:08:06    

mogi : et pourtant, ca date :)

Reply

Marsh Posté le 26-11-2001 à 16:10:51    

int entier;
 char tab[33];
 int i;
 scanf("%d",&entier);
 
 
 tab[32]=0;
 
 for (i=31;i>=0;i--)
 {
  if (entier & (1<<i))
   tab[31-i]='1';
  else
   tab[31-i]='0';
 }
 
 printf(tab);
 
 
Soit je suis con soit vous vous compliquer la vie :D

Reply

Marsh Posté le 26-11-2001 à 16:13:27    

Chris : ce qu'on a decrit c'est la methode propre, facilement comprehensible (peemousse nous dit qu'il est pas trop top), etnon dependante d'un langage. Mais c'est clair que si je devais l'implementer en C je ferais comme toi ;)

Reply

Marsh Posté le 26-11-2001 à 16:18:58    

Gonzoide a écrit a écrit :

Chris : ce qu'on a decrit c'est la methode propre, facilement comprehensible (peemousse nous dit qu'il est pas trop top), etnon dependante d'un langage. Mais c'est clair que si je devais l'implementer en C je ferais comme toi ;)  




 
vi...m'enfin quand on sait que ls PC bosse en binaire, n'est il pas logique (voir meme astucieux) d'utiliser ce fait ?
 
Sinon peemouse si t'as pas saisi ce que je fais :
 
ton PC travaille en binaire. par exemple 7 sera stocker sous la forme :
 
00000000000000000000000000000111 (ce qui est ce que l'on cherche finalement)
 
 
29 "0" + 3 "1"
Soit un total de 32bit (d'ou le 32 de ma boucle)
 
ce que l'on va faire c tester chaque bit l'un apres l'autre pour savoir si il est sur 0 ou sur 1
 
c'est le if (entier & (1<<i))  
 
en plus propre ca serait :
 
if ((entier & (1<<i)) != 0)
 
le (1<<i) ca veut dire "un decaler de i bit vers la gauche)
 
par exemple :
 
1<<0 donnera :
00000(...)1
 
1<<3 donnera :
00000(...)1000
 
ok ?
 
donc on utilise ce chiffre pour faire un ET logique avec notre entier. le ET va s'appliquer sur chaque bit
 
pour memoire
 
0 ET 0 = 0
1 ET 0 = 0
0 ET 1 = 0
1 ET 1 = 1
 
donc si apres notre ET le resultat est different de 0 cela veut dire que le i eme bit est sur 1, sinon sur 0
 
(si ca te semble tjs confu soit tu dis ou et je me relance dans une nouvelle explication soit tu utilise la methode mathematique decrite par les autres ;) )

Reply

Marsh Posté le 26-11-2001 à 16:18:58   

Reply

Marsh Posté le 26-11-2001 à 16:24:40    

//wow !!! je pensais que mon post serai aussi bien suivi...;sympa e tout cas...
 
bon, j'ai à peu pres compris ta methode chrisbk, mais tu utilises des tableaux et comme on les a pas vu encore j'ai pas trop le droit de le faire donc je pense que je vais utiliser la methode dite mathématique...qui m'est plus familiere on va dire
 
merci a tous

Reply

Marsh Posté le 26-11-2001 à 16:26:22    

peemousse a écrit a écrit :

//wow !!! je pensais que mon post serai aussi bien suivi...;sympa e tout cas...
 
bon, j'ai à peu pres compris ta methode chrisbk, mais tu utilises des tableaux et comme on les a pas vu encore j'ai pas trop le droit de le faire donc je pense que je vais utiliser la methode dite mathématique...qui m'est plus familiere on va dire
 
merci a tous  




 
bah tu peux t'eviter l'utilisation ds tableaux en mettant un printf direct dans la boucle

Reply

Marsh Posté le 26-11-2001 à 16:29:45    

ou alors tu concatenes au fur et a mesure un char * avec "0" ou "1" ...

Reply

Marsh Posté le 26-11-2001 à 16:36:26    

Gonzoide a écrit a écrit :

ou alors tu concatenes au fur et a mesure un char * avec "0" ou "1" ...  




 
si il a pas le droit au tableau, les char * fodrait ptet mieux eviter ;)

Reply

Marsh Posté le 26-11-2001 à 16:38:06    

Mais son prof va complètement halluciner, y va le prendre pour un génie... le type, il à même pas appris à faire des tableau et y sors à son prof un truc qui bosse sur les bits comme ça !?
perso, moi j'y croirais pas !  :non:

Reply

Marsh Posté le 26-11-2001 à 16:39:53    

bah si il a compris la methode, hein ?

Reply

Marsh Posté le 26-11-2001 à 16:49:07    

chrisbk a écrit a écrit :

 
si il a pas le droit au tableau, les char * fodrait ptet mieux eviter ;)  




 
snif ... du C sans char*, c'est plus vraiment du C :sweat:

Reply

Marsh Posté le 26-11-2001 à 17:07:09    

he he.je suis de l'avis de EL GRINGO mais c sympa kan meme..je vais utiliser la methode "mathematique" dans une boucle et HOp on va tester de toute facon il faut bien que j'essaye plusieurs choses
 
 
merci à tous

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed