Programmation C++

Résolu/Fermé
kira33 Messages postés 9 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 6 mai 2009 - 12 févr. 2009 à 20:32
kira33 Messages postés 9 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 6 mai 2009 - 13 févr. 2009 à 22:32
Bonjour,
Est ce vous pouvez m'expliquer la conséquence des instructions suivantes sur la variable "deplacement"(contenu) :

u_short deplacement=258;

deplacement <<= 3;
deplacement >>= 3;

Merci pour votre aide.
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
13 févr. 2009 à 11:20
Ah oui, j'ai pas pensé à l'int overflow.
En fait, ces deux opérations vont permettre d'enlever les trois premiers bits de gauche. Les trois retenus vont disparaître.
En parlant de modulo, pour des unsigned char, cela revient à :
((a%224)%192%128);
.
Ou retenons simplement que les trois bits de gauche vont disparaître comme si on appliquant un masque avec un AND bit à bit. C'est donc l'équivalent de :
a&31;
Plus rapide.
De plus attention, à ne pas initialiser ta variable à 258 si c'est un unsigned char.
Cdlt
2
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 févr. 2009 à 20:50
Salut,
Tu multiplies par 8 puis tu redivises par 8. Conclusion, il se passe pas grand chose ^^.
1
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 févr. 2009 à 09:35
Sauf si tu fait un overflow non ?
Les bits sortant sont remis de l'autre coté ?
Si c'est ce que je pense, ça fait une espèce de modulo.
0
kira33 Messages postés 9 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 6 mai 2009 1
13 févr. 2009 à 22:32
Effectivement, en cherchant dans le source j'ai compris que cette variable représente le champs " Fragment Offset + Flags" d'un paquet IP. Puisque les "flags" sont codés sur 3 bits, Le but est de garder que l'information "Offset" qui est sur 13 bits dans la variable "deplacement" car les trois premiers bits de gauche ont disparu .
Merci pour les repenses.
0