Saros
Messages postés921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 septembre 2010
-
28 mai 2004 à 08:14
StanOfSky
Messages postés43Date d'inscriptionmardi 30 mars 2004StatutMembreDerniè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.
StanOfSky
Messages postés43Date d'inscriptionmardi 30 mars 2004StatutMembreDerniè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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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és921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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és921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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és43Date d'inscriptionmardi 30 mars 2004StatutMembreDerniè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és6Date d'inscriptionjeudi 29 avril 2004StatutMembreDerniè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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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és921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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)
et comme je te disais, change le pow(2,i), faut pas faire comme ça, mais je sais pluuuus :( dsl :p
Saros
Messages postés921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 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
11 juin 2004 à 21:59
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)
10 juin 2004 à 20:10
10 juin 2004 à 19:40
Saros
10 juin 2004 à 14:49
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 ?
10 juin 2004 à 10:14
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...
10 juin 2004 à 07:44
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)
9 juin 2004 à 23:47
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 ;) )
++
2 juin 2004 à 14:40
sinon voila koi...lol
bon courage :)
31 mai 2004 à 01:03
30 mai 2004 à 18:05
29 mai 2004 à 01:42
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
28 mai 2004 à 08:14
On peut voir le truc dans le fait que les tableaux commencent toujours par des 2^n... Mais en tout cas bien trouvé...
Saros