私が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
ですか?