कहते हैं कि मेरे पास एक झंडे का एक सेट है, जिसे 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 ((flags & AMAZING_FLAG) != doSet){
}
लेकिन यह वास्तव में काम नहीं करता है, के trueबराबर लगता है 0x01।
तो, एक बूलियन से थोड़ा तुलना करने का एक साफ तरीका है?
(flags & AMAZING_FLAG) && doSet:?