Supponi di avere un set di flag, codificato in uint16_t flags
. Ad esempio AMAZING_FLAG = 0x02
,. Ora ho una funzione. Questa funzione deve verificare se voglio cambiare il flag, perché se voglio farlo, devo scrivere in flash. E questo è costoso. Pertanto, voglio un controllo che mi dica se flags & AMAZING_FLAG
è uguale a doSet
. Questa è la prima idea:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Questa non è un'istruzione if intuitiva. Sento che dovrebbe esserci un modo migliore, qualcosa del tipo:
if ((flags & AMAZING_FLAG) != doSet){
}
Ma questo in realtà non funziona, true
sembra essere uguale a 0x01
.
Quindi, c'è un modo pulito per confrontare un po 'con un booleano?
(flags & AMAZING_FLAG) && doSet
:?