Digamos que tengo un conjunto de banderas, codificadas en uint16_t flags
. Por ejemplo, AMAZING_FLAG = 0x02
. Ahora tengo una función. Esta función necesita verificar si quiero cambiar la bandera, porque si quiero hacer eso, necesito escribir en flash. Y eso es caro. Por lo tanto, quiero un cheque que me diga si flags & AMAZING_FLAG
es igual a doSet
. Esta es la primera idea:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Esta no es una declaración if intuitiva. Siento que debería haber una mejor manera, algo como:
if ((flags & AMAZING_FLAG) != doSet){
}
Pero esto en realidad no funciona, true
parece ser igual a 0x01
.
Entonces, ¿hay una manera ordenada de comparar un poco con un booleano?
(flags & AMAZING_FLAG) && doSet
:?