macro

macro - C - Programmation

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.

Reply

Marsh Posté le 14-02-2006 à 05:37:56   

Reply

Marsh Posté le 14-02-2006 à 12:16:32    

Ce n’est 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 ;)
 
J’aurais 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 )\
                                | ( ((x) & 0xFFF0000000000000ULL) >> 12 )\
                                | ((x) & 0x000000FFFFFFFFFFULL) )


Message édité par Tarabiscote le 14-02-2006 à 12:21:49
Reply

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 ?

Reply

Marsh Posté le 14-02-2006 à 12:23:38    

0ULL c'est zéro en unsigned long long (sur 64 bits en bref)

Reply

Marsh Posté le 14-02-2006 à 12:29:46    

Et 0x000FFF000000000 ça n'aurait pas été suffisant ?

Reply

Marsh 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.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-02-2006 à 13:30:41    

Ok compris.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed