Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1194 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Vrai décalage >> sur type signé arbitraire ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Vrai décalage >> sur type signé arbitraire ?

n°184118
Musaran
Cerveaulté
Posté le 27-07-2002 à 00:27:47  profilanswer
 

J'ai un problème avec l'expression suivante:

Code :
  1. signed char var= -128;                                     //1000 0000 binaire
  2.                var >> shift ; //réplication du bit de signe: 1100 0000 binaire
  3. (unsigned char)var >> shift ; //insertion de 0             : 0100 0000 binaire

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
mood
Publicité
Posté le 27-07-2002 à 00:27:47  profilanswer
 

n°184167
bjone
Insert booze to continue
Posté le 27-07-2002 à 06:51:58  profilanswer
 

en asm:
décalages signés:
sal,sar (gauche, droite)
 
non signés:
shl,shr (gauche,droite)
 
évidemment sal & shl sont équivalents....


Message édité par bjone le 27-07-2002 à 06:52:26
n°184189
LetoII
Le dormeur doit se réveiller
Posté le 27-07-2002 à 11:53:29  profilanswer
 

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


---------------
Le Tyran
n°184220
bjone
Insert booze to continue
Posté le 27-07-2002 à 13:41:29  profilanswer
 

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)
 
 
 
 
 

n°184935
Musaran
Cerveaulté
Posté le 29-07-2002 à 02:43:29  profilanswer
 

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 :
  1. int var ; //ou char, short, __int64...
  2. __asm{
  3. ???
  4. }


Message édité par Musaran le 29-07-2002 à 02:54:10

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°189688
Musaran
Cerveaulté
Posté le 05-08-2002 à 00:54:47  profilanswer
 

Les fonctions de rotation pour entiers existent: lrotr et rotl.
rotr est définie comme suit (Visual Stufio 6):

Code :
  1. include: stdlib.h
  2. fichier: ROTR.C
  3. unsigned __cdecl _rotr (
  4.         unsigned val,
  5.         int shift
  6.         )
  7. {
  8.         register unsigned lobit;        /* non-zero means lo bit set */
  9.         register unsigned num = val;    /* number to rotate */
  10.         shift &= 0x1f;                  /* modulo 32 -- this will also make
  11.                                            negative shifts work */
  12.         while (shift--) {
  13.                 lobit = num & 1;        /* get high bit */
  14.                 num >>= 1;              /* shift right one bit */
  15.                 if (lobit)
  16.                         num |= 0x80000000;  /* set hi bit if lo bit was set */
  17.         }
  18.         return num;
  19. }

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 ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Vrai décalage >> sur type signé arbitraire ?

 

Sujets relatifs
renvoyer un type utilisateur dans une methode C++recuperer le type MIME d'un fichier en php ?
[Format] Une date du type "2415019" sous Unix...Comment la convertir?lire et écrire une image dont le type est inconnu
c est quoi comme type de virus un trojan[PHP] Peut-on créer une constante de type tableau? (résolu)
Comment créer une aide type aide windows ? kel outil ?[PHP] recherche script simple upload images + variable type/poids/H/W
[ACCESS2000 et XP] Champs de type NuméroAuto : Increments[VB] Saisie du caratère " dans une variable de type String
Plus de sujets relatifs à : Vrai décalage >> sur type signé arbitraire ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR