ORDINATEUR DEVIN

Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010 - 28 mai 2004 à 08:14
StanOfSky Messages postés 43 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 7 octobre 2006 - 11 juin 2004 à 21:59
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/23182-ordinateur-devin

StanOfSky Messages postés 43 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 7 octobre 2006
11 juin 2004 à 21:59
huhuhu ouai je me suis un peu embrouillé avec droite et gauche :p
101101 >> 1 -> 10110
101101 << 1 -> 1011010

vala

>> << fonctionne sur tout les nombres entier ou pas, mais ne fait un multiplication ou division que sur les entier vu le format de codage binaire d'un entier...
a noter que le format d'un entier signé est le complément à 2 (ba normalement)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 juin 2004 à 20:10
ok, ça me va, mais si ça vient de la MSDN, je pense que c'est surtout valable pr le duo wintel, on change pas une équipe qui gagne du pognon ^^
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
10 juin 2004 à 19:40
Hum... selon la MSDN, il disent bien que '<<' multiplie et que '>>' divise. Donc à mon avis, ça dépend pas du système...
Saros
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 juin 2004 à 14:49
ben parce que selon que c'est du little ou du big endian, le bit de poids fort est pas du même côté. exemple:

si ceci est en big, 10010
alors 01001 en little est le même nombre, mais les bits sont pas ds le même ordre!

donc si tu dis:

101 << 2, ça donnera tjs 10100, ou bien selon le système de codage ça donnera soit 10100, soit 00101 ?
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
10 juin 2004 à 10:14
lol
Il s'est juste embrouillé dans les mots droite/gauche, mais à part ça c'est bien i << 5 qui multiplie par 2^5 et vice-versa.
Et puis :
"alors l'opéro <<, il faut d'office une multiplication, ou d'office un décalage vers la droite? "
J'ai pas compris...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
10 juin 2004 à 07:44
vers la gauche ou vers la droite, ça dépend du type d'encodage (big/little endian).

alors l'opéro <<, il faut d'office une multiplication, ou d'office un décalage vers la droite? (et pq ça va vers la drotie qd les flèches st vers la gauche? :p)
StanOfSky Messages postés 43 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 7 octobre 2006
9 juin 2004 à 23:47
c po une rotation de bit qu'il faut faire mais juste un décalage...

i << 5 decale les bits du nombre i de 5 crans vers la droite donc multiplie par 2^5
i >> 5 decale les bits du nombre i de 5 crans vers la gauche donc divise par 2^5

<< >> | & ^ etc... sont des fonctions basiques sur les bits (fau faire un ti peu de logique avant de se lancer dans la prog ou alors de l'asm ;) )

++
bibije Messages postés 6 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 2 juin 2004
2 juin 2004 à 14:40
pourquoi vs ne mettez jamais d' exe ds vos prog ??? pfff...jen ai trop marre moi....lol
sinon voila koi...lol
bon courage :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
31 mai 2004 à 01:03
oui c'est ça, les opérateurs de rotation de bits. il y a aussi une fonction dans <cmath> qui le fait pr que ce soit plus "clair" (pr des lecteurs non-avertis).
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
30 mai 2004 à 18:05
En C (2^i) s'écrit (1 >> i) ou (1 << i) je ne sait plus trop. C'est bien à ça que tu fais allusion ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
29 mai 2004 à 01:42
marrant ton truc, pr compiler j'ai dû mettre les MFC en liaison dynamique, mais soit (c parce qu'il me manquait des fichiers .lib, pas bien grave et pas de ta faute).

tu fais à un moment, ds une switch, n += 0; tu peux virer cette ligne non? ;-) et tu fais aussi: n += pow(2, i);
pour les puissances de deux, me souviens plus du nom mais y a une fonction tte faite, et tu pourrais utiliser des rotations de bits. malheureusement, autant je reconnais ces opérations qd je les lis, autant je ne sais pas les écrire moi-même, alors je ne te serai pas d'un grand secours, mais sache juste qu'il y a franchement moyen d'améliorer ce pow, surtout que pow retourne un double, donc tu dois caster le retour normallement:

n += (int) pow(2,i);

de plus, ta switch (je suis tjs autour de la ligne 125) ne gère que deux case... c'est pas la peine de faire une switch pr ça :)

regarde l'opérateur ternaire:

((condition) ? valeur de retour si true : valeur de retour si false)

en pratique,

switch(bit[i])
{case 0: //conversion binaire-decimal
N+=0;
break;
case 1:
N+=(int)pow(2,i);
break;
}

peut s'écrire:

n += (bit[i]) ? (int)pow(2,i) : 0 ;

et comme je te disais, change le pow(2,i), faut pas faire comme ça, mais je sais pluuuus :( dsl :p
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
28 mai 2004 à 08:14
En tout cas ça marche bien...
On peut voir le truc dans le fait que les tableaux commencent toujours par des 2^n... Mais en tout cas bien trouvé...
Saros