Decalage de bits ... curiosité !
Bonjour,
j'ai vu que parfois dans certains headers que pour certaines constantes, au lieu de l'attribution directe d'une valeure entière on trouve parfois des décallages de bits sur une meme valeur.
Exemple:
Code:
1 2 3 4 5 6
| typedef enum
{
EX_UN = 1 << 1,
EX_DEUX = 1 << 2,
EX_TROIS = 1 << 3
}test_e; |
Pourquoi ? Y'a t-il un avantage ? Ou bien .... chais pas ... !
Ceci est surtout par curiosité et pour ne pas rester idiot devant de telles constantes :lol:
En tout cas, merci d'avance pour vos lumières :wink:
Re: Decalage de bits ... curiosité !
Citation:
Envoyé par CSoldier
Bonjour,
j'ai vu que parfois dans certains headers que pour certaines constantes, au lieu de l'attribution directe d'une valeure entière on trouve parfois des décallages de bits sur une meme valeur.
Exemple:
Code:
1 2 3 4 5 6
| typedef enum
{
EX_UN = 1 << 1,
EX_DEUX = 1 << 2,
EX_TROIS = 1 << 3
}test_e; |
Pourquoi ? Y'a t-il un avantage ? Ou bien .... chais pas ... !
Ceci est surtout par curiosité et pour ne pas rester idiot devant de telles constantes :lol:
En tout cas, merci d'avance pour vos lumières :wink:
Plusieurs remarques en plus de ce qui a été dit.
Un enum produit au maximum un int, soit un masque 1 << 14 garanti. On ne sait pas faire d'enum non signé ni d'enum de long.
Pour être portable, il faut faire ceci :
#define BIT(n) (1ul << (n))
avec ça, on garantit 32 bits (n de 0 à 31) (type unsigned long)
En c99, on peux faire :
#define BIT(n) (1ull << (n))
(type unsigned long long, avec n de 0 à 63)