programme pour transformer un entier en binaire - Programmation
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 !?
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]
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.
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
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
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
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 )
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
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
Marsh Posté le 26-11-2001 à 16:29:45
ou alors tu concatenes au fur et a mesure un char * avec "0" ou "1" ...
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
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 !
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
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
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+