Vrai décalage >> sur type signé arbitraire ? - C++ - Programmation
Marsh Posté le 27-07-2002 à 06:51:58
en asm:
décalages signés:
sal,sar (gauche, droite)
non signés:
shl,shr (gauche,droite)
évidemment sal & shl sont équivalents....
Marsh Posté le 27-07-2002 à 11:53:29
tu récupère la valeur du bit de poid fort, tu le met à 0, tu décale et tu remet le bon bit à la valeur initiale
Marsh Posté le 27-07-2002 à 13:41:29
oui, chui trop con, t'as juste à faire:
dans le cas est c'est un 32bits:
l'idée:
(yo>>1)&0x7fffffff
(yo>>2)&0x3fffffff
(tu forces les bits inserés à 0)
Marsh Posté le 29-07-2002 à 02:43:29
J'y avais bien pensé, mais je souhaite éviter de rajouter une instruction.
J'ai besoin d'un "sign_cast<unsigned>(var)" qui n'existe pas !
bjone a écrit a écrit : en asm: décalages signés: sal,sar (gauche, droite) non signés: shl,shr (gauche,droite) évidemment sal & shl sont équivalents.... |
Je sais pas me servir de l'assembleur.
Tu pourrais me mettre la syntaxe "telle quelle" STP:
Code :
|
Marsh Posté le 05-08-2002 à 00:54:47
Les fonctions de rotation pour entiers existent: lrotr et rotl.
rotr est définie comme suit (Visual Stufio 6):
Code :
|
A ma grande surprise elle ne fait pas appel à l'instruction assembleur.
Elle utilises aussi un if évitable, ce qui est peu performant.
Mais c'est quoi ce mauvais code ?
Et sur d'autres compilateurs, c'est comment ?
Marsh Posté le 27-07-2002 à 00:27:47
J'ai un problème avec l'expression suivante:
Si var est de type signé, le bit de poids fort est répliqué au décalage, ce que je ne souhaite pas.
Mais je ne peut pas utiliser de cast "unsigned" parceque le type est un paramètre de patron.
Comment faire ?
Accessoirement, quelqu'un sait-il écrire le code assembleur pour faire une rotation de bits sur une variable C ?
8,16,32 bits ou plus SVP.
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone