Diyelim ki bir uint16_t kodlanmış bir dizi bayrak var flags
. Örneğin AMAZING_FLAG = 0x02
,. Şimdi bir fonksiyonum var. Bu işlevin bayrağını değiştirmek isteyip istemediğimi kontrol etmesi gerekir, çünkü bunu yapmak istersem flaşa yazmam gerekir. Ve bu pahalı. Bu nedenle, bana flags & AMAZING_FLAG
eşit olup olmadığını söyleyen bir kontrol istiyorum doSet
. Bu ilk fikir:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Bu sezgisel bir if ifadesi değildir. Daha iyi bir yol olmalı gibi hissediyorum, şöyle bir şey:
if ((flags & AMAZING_FLAG) != doSet){
}
Ama bu aslında işe yaramıyor, true
eşit gibi görünüyor 0x01
.
Yani, bir boolean ile biraz karşılaştırmanın düzgün bir yolu var mı?
(flags & AMAZING_FLAG) && doSet
mu:?