Скажем, у меня есть набор флагов, закодированных в uint16_t flags
. Например, AMAZING_FLAG = 0x02
. Теперь у меня есть функция. Эта функция должна проверить, хочу ли я изменить флаг, потому что, если я хочу это сделать, мне нужно записать на флэш-память. И это дорого. Поэтому я хочу чек, который говорит мне, flags & AMAZING_FLAG
равен ли doSet
. Это первая идея:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Это не интуитивное утверждение if. Я чувствую, что должен быть лучший способ, что-то вроде:
if ((flags & AMAZING_FLAG) != doSet){
}
Но это на самом деле не работает, true
похоже, равно 0x01
.
Итак, есть ли хороший способ сравнить немного с логическим значением?
(flags & AMAZING_FLAG) && doSet
?