Programmation C++

Résolu
kira33 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
kira33 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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.

4 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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   Statut Contributeur Dernière intervention   1 847
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   1
 
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