Katakanlah saya memiliki satu set bendera, yang dikodekan dalam uint16_t flags
. Sebagai contoh AMAZING_FLAG = 0x02
,. Sekarang, saya punya fungsi. Fungsi ini perlu memeriksa apakah saya ingin mengubah bendera, karena jika saya ingin melakukan itu, saya perlu menulis ke flash. Dan itu mahal. Oleh karena itu, saya ingin cek yang memberi tahu saya apakah flags & AMAZING_FLAG
sama dengan doSet
. Ini adalah ide pertama:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Ini bukan pernyataan intuitif jika. Saya merasa harus ada cara yang lebih baik, seperti:
if ((flags & AMAZING_FLAG) != doSet){
}
Tapi ini tidak benar-benar berfungsi, true
tampaknya sama dengan 0x01
.
Jadi, apakah ada cara yang rapi untuk membandingkan sedikit dengan boolean?
(flags & AMAZING_FLAG) && doSet
:?