[Langage C] Problème de décalage d'une variable de type __int64
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:
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:
typedef unsigned __int64 u64;
Pour l'affichage, mettre "%I64x".
Merci Emmanuel pour ta réponse.