ว่าฉันมีชุดของค่าสถานะการเข้ารหัสใน flags
uint16_t ตัวอย่างเช่น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
?