Ciao a tutti,
sto cercando di capire come si utilizzano gli operatori bitwise per gestire le bitflags.
Iniziamo col codice:
Codice PHP:
enum FoodFlags
{
CALDO = 0x01, // 1
FREDDO = 0x02, // 2
DOLCE = 0x04, // 4
SALATO = 0x08 // 8
};
uint32 foodFlag=0;
Assegnazione Flags:
Codice PHP:
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
Codice PHP:
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...