Powiedzmy, że mam zestaw flag zakodowanych w uint16_t flags
. Na przykład AMAZING_FLAG = 0x02
. Teraz mam funkcję. Ta funkcja musi sprawdzić, czy chcę zmienić flagę, ponieważ jeśli chcę to zrobić, muszę napisać, aby flashować. A to jest drogie. Dlatego chcę testu, który mówi mi, czy flags & AMAZING_FLAG
jest równy doSet
. To jest pierwszy pomysł:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Nie jest to intuicyjna instrukcja if. Wydaje mi się, że powinien istnieć lepszy sposób, na przykład:
if ((flags & AMAZING_FLAG) != doSet){
}
Ale to tak naprawdę nie działa, true
wydaje się być równe 0x01
.
Czy istnieje dobry sposób na porównanie z wartością logiczną?
(flags & AMAZING_FLAG) && doSet
:?