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