[c] ROL ?

Fermé
Manu - 1 avril 2006 à 17:21
 Manu - 2 avril 2006 à 09:31
Bonjour !

J'ai un souci en C. Je cherche à traduire un programme en assembleur en C, mais j'ai un problème avec l'instruction ROL (rotation de bits sur la gauche). En effet, je souhaite effectuer un ROL de 13, mais je ne sais absolument pas comment transcrire ça en C.

J'ai fait des recherches, mais j'ai pas trouvé grand chose d'efficace :(

Merci d'avance pour votre aide !

2 réponses

Salut,

Je sais pas si c'est "efficace", mais moi je fais ça comme ceci:

#define ROL(x,b) (((x) >> (b)) | ((x) << (32 - (b))))

int main(int argc, char * argv[])
{
int a = 0x0A00000F;

printf("%8.8x\tROL : %8.8x\n",  a, ROL(a,16));

getchar();
return 0;
}


#define ROL(x,b) (((x) >> (b)) | ((x) << (32 - (b))))

ça fait un ou logique entre les bits de poids forts décalés vers la droite (les MSB sont donc nuls) et les bits de poids faibles vers la gauche (donc les LSB sont nuls et le résultat du ou est correct)

dans mon exemple, j'ai donc
- a = 0A00000F
- a >> 16 = 00000A00
- a << 16 = 000F0000
- or = 000F0A00
ce qui correspond bien à une rotation de 16 bits vers la gauche.

voilà, j'espère que ça aide.
0
Merci beaucoup cataclypse pour cette réponse précise. Je teste de suite !
0