macro - C - Programmation
Marsh Posté le 14-02-2006 à 12:16:32
Ce nest pas très bien écrit mais ça inverse les bits situés à cette position 0xFFF0000000000000 avec ceux de cette position 0x000FFF0000000000. Les 24 bits de poids fort en fait
Jaurais plutôt écrit comme ça personnellement :
#define SWITCH_UPPER_24_BITS(x) ( ( ((x) & 0x000FFF0000000000ULL) << 12 ) | ( ((x) & 0xFFF0000000000000ULL) >> 12 ) ) |
Ou comme ça si on veut garder les bits à de poids faible :
#define SWITCH_UPPER_24_BITS(x) ( ( ((x) & 0x000FFF0000000000ULL) << 12 )\ |
Marsh Posté le 14-02-2006 à 12:20:00
On peut avoir une explication de lecture de la première version ? C'est quoi 0ULL ?
Marsh Posté le 14-02-2006 à 12:23:38
0ULL c'est zéro en unsigned long long (sur 64 bits en bref)
Marsh Posté le 14-02-2006 à 12:29:46
ReplyMarsh Posté le 14-02-2006 à 12:49:38
slash33 a écrit : Et 0x000FFF000000000 ça n'aurait pas été suffisant ? |
Non. Trop grand pour un int.
Marsh Posté le 14-02-2006 à 05:37:56
Salut,
J ´ai avec moi un macro dont je ne connais la signification.
Voici le macro en question :
#define SWITCH_UPPER_24_BITS(x) ((((x) & (~((~(0ULL))>>12))>>12))<<12) | ((((x) & ~((~0ULL)>>12)))>>12)
Une aide me serait precieuse pour la continuation de mon exercice .
Merci.