PDA

Visualizza la versione completa : [c++] operazioni con Bitflag


P75
28-06-2009, 00:48
Ciao a tutti,
sto cercando di capire come si utilizzano gli operatori bitwise per gestire le bitflags.

Iniziamo col codice:

enum FoodFlags
{
CALDO = 0x01, // 1
FREDDO = 0x02, // 2
DOLCE = 0x04, // 4
SALATO = 0x08 // 8

};

uint32 foodFlag=0;


Assegnazione Flags:


foodFlag = FREDDO | DOLCE;

// Che sintassi devo usare per *togliere* DOLCE?
// Alcuni usano xor, altri and not... qualcuno mi può indicare un esempio pratico?
foodFlag ^=DOLCE;
//oppure:
foodFlag &=~DOLCE;
// ?__?



Valutazione if


if (foodFlag & CALDO)
{
//Qualcosa
}
// Che devo usare per negare &?
if (!(foodFlag & CALDO))
//oppure
if (foodFlag & ~CALDO)


Inoltre, è corretto usare una bitflag per gestire dei valori non esclusivi?
Cioé, un "food" del mio esempio può essere dolce e caldo? E posso verificare queste proprietà con la sicurezza che i bit aggiunti/rimossi non iterferiscano fra loro?

Ho visto che oltre alle bitflags esistono anche le bitmask, quando vanno usate le prime e quando invece le seconde?

Grazie per l'attenzione...

Loading