Giả sử tôi có một bộ cờ, được mã hóa trong uint16_t flags
. Ví dụ , AMAZING_FLAG = 0x02
. Bây giờ, tôi có một chức năng. Hàm này cần kiểm tra xem tôi có muốn thay đổi cờ không, vì nếu tôi muốn làm điều đó, tôi cần viết vào flash. Và đó là đắt tiền. Vì vậy, tôi muốn một kiểm tra cho tôi biết nếu flags & AMAZING_FLAG
bằng doSet
. Đây là ý tưởng đầu tiên:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Đây không phải là một tuyên bố nếu trực quan. Tôi cảm thấy nên có một cách tốt hơn, đại loại như:
if ((flags & AMAZING_FLAG) != doSet){
}
Nhưng điều này không thực sự hoạt động, true
dường như bằng 0x01
.
Vì vậy, có một cách gọn gàng để so sánh một chút với một boolean?
(flags & AMAZING_FLAG) && doSet
?