Voila j’ai comencé le c++, (et comme je suis en 1ere S, je me contente d’un bouqin pour apprendre ce language), et donc on me pose un probleme,(que je ne suis pas arrivé a résoudre , donc j’ai regardé la solution mais j’ai pas trop compris).Donc j’aimerais savoir comment vous le resolviriez merci.
Voila le pb :
“Ecrivez un programme qui recupere une variable de type int et determine le reste de sa division par 8, à l’aide de l’un des operateurs BIT (c’est a dire sans % )”
Sérieux, je trouve que l’on devrait voir plus de thread comme celui-ci sur ce forum. Toutes les semaines on devrait présenter un problème en C/C++/Java et voir les différentes solutions possibles.
[quote]En plus de ca, Glop a aussi expliqué aux non-geek ce que ca fait.
Je précise que ca ne marche que pour avoir le reste de division par un multiple de 2.
le & signifie opérateur AND, utilisé pour très souvent pour faire ce genre de masquage.[/quote]
Non, pas un multiple de 2. Ca marche pas pour 6. Ni ma technique de decalage, hein. Uniquement pour un nombre 2^X.
LoneWolf
Ancien electronicien, qui adore jouer avec les octets ;))
Un grand merci à Glop de m’avoir défendu.
Je ne suis pas un bourrin, non mais !
En plus de ca, Glop a aussi expliqué aux non-geek ce que ca fait.
Je précise que ca ne marche que pour avoir le reste de divisions par une puissance de 2.
le & signifie opérateur AND, utilisé pour très souvent pour faire ce genre de masquage.
[edit]: remplacé: ca ne marche que pour les puissances de de 2
[quote]Moui, mais faut y penser. Division, on pense tout de suite au decalage.
Et pis je voulais trouver une solution avec le decalage :pleure:;;[/quote]
Ce que tu fais equivaut d’ailleurs strictement a faire:
reste = nombre - (nombre & 0xF8)
c’est a dire mettre a 0 les trois derniers chiffres en binaire (que tu fais en decalant de trois a droite et en redecalant de trois a gauche) et a soustraire.
On peut trouver 10974 methodes, c’est beau l’informatique.
[quote]Bof reste=variable & 0x07 me semble beaucoup plus comprehensible est pas du tout hardcore. C’est les trois derniers bits du chiffre en binaire le reste de la division par 8. Soit nombre & 00000111 cad variable & 0x07. Pas besoin de penser decalage ou je sais pas quoi.
[Edité le 9/9/2002 par GloP][/quote]
Moui, mais faut y penser. Division, on pense tout de suite au decalage.
Et pis je voulais trouver une solution avec le decalage :);;
Bof reste=variable & 0x07 me semble beaucoup plus comprehensible est pas du tout hardcore. C’est les trois derniers bits du chiffre en binaire le reste de la division par 8. Soit nombre & 00000111 cad variable & 0x07. Pas besoin de penser decalage ou je sais pas quoi.
Exactement comme si tu disais en base 10, le reste de la division par 100 de 1234 c’est 34. Ou de 1291060956 c’est 56. Tu prend juste les 2 derniers chiffres.
Mais j’ai quand même la solution !
En fait c’est un calcul en base 2
Diviser par 8 c’est faire un décalage de 3 vers la gauche sur la représentation binaire du nombre.
Tu gardes le principe mais tu decales de 3 vers la gauche a chaque itération .
( dsl je sais plus c’est quoi l’opérateur de décalage en C )
félicitations Lord Jedi
tu peux me filer la référence du bouquin que tu utilises stp? et me dire s’il est bien etc… tu avais des connaissances en prog avant?
merci
c’est sympa, mais tu as mal lu il y a marqué "a l’aide d’un operateur bit (c a d : &,^, etc…)
mais bon remarque je ne pense pas que cela vas beaucoup me gener dans mon apprentissage du c++ et + tard du vc++. (j’utiliserais %).
Mais si qq sait comment faire avec un operateur BIT cette fois-ci je suis preneur
A ce niveau la c’est presque un problemed’algorithmique !
Bon, sans utiliser % je ferais une boucle qui decremente ton nombre de 8 jusqu’a ce que , ce qu’il te reste soit inferieur a 8.
valeur = valeur_lue /* on copie la valeur lue */
while (valeur