Angenommen, ich habe eine Reihe von Flags, die in einem uint16_t codiert sind flags
. Zum Beispiel AMAZING_FLAG = 0x02
. Jetzt habe ich eine Funktion. Diese Funktion muss prüfen, ob ich das Flag ändern möchte, denn wenn ich das tun möchte, muss ich in Flash schreiben. Und das ist teuer. Daher möchte ich eine Überprüfung, die mir sagt, ob flags & AMAZING_FLAG
gleich ist doSet
. Dies ist die erste Idee:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Dies ist keine intuitive if-Anweisung. Ich denke, es sollte einen besseren Weg geben, so etwas wie:
if ((flags & AMAZING_FLAG) != doSet){
}
Aber das funktioniert eigentlich nicht, true
scheint gleich zu sein 0x01
.
Gibt es eine gute Möglichkeit, ein bisschen mit einem Booleschen Wert zu vergleichen?
(flags & AMAZING_FLAG) && doSet
?