Bonjour,

je travaille actuellement sur un programme en C sous windows et j'utilisa le compilateur Microsoft Visual C++ 6.0. J'ai besoin de faire un décalage à droite (ou à gauche) d'une variable de type __int64, mais je rencontre le problème suivant: le décalage qui se fait et le décalage de chaque mot de 32bit de la variable à part, ce qui cause la perte d'information au milieu du mot de 64bits. voici un exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
typedef __int64 u64;
 
u64 R = 0x2A5D3190DC0D5325;
 
printf("R=%08x%08x", R);
printf("R>>1= %08x%08x", R>>1);
le résultat que j'obtiens est le suivant:

R=dc0d53252a5d3190
R>>1= 6e06a992152e98c8


Le R que le programme m'affiche a ses deux mots de 32bits inversé par rapport à la valeur de R donnée au sein du programme. Est-ce que c'est normal?

Et le problème majeur pour moi, c'est que quand je décale à la main, bit par bit, la variable R, j'obtiens la valeur R>>1= 6e06a992952e98c8, et c'est cette valeur qui est correcte et n'arrive pas à obtenir à partir du programme.

Je ne peux plus avancer dans mon projet à cause de ce problème. Prière de m'aider à résoudre ce problème le plutôt possible.

Je vous en remercie d'avance.

La solution m'a été fournie par Emmanuel Delahaye:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
typedef unsigned __int64 u64;
Pour l'affichage, mettre "%I64x".

Merci Emmanuel pour ta réponse.