Bạn đang có lẽ quen thuộc với chương trình enum
bitmask, như:nếu (mặt nạ & VALUE) hoặc nếu ((mặt nạ & VALUE) == VALUE)?
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
Tôi đã nhìn thấy rất nhiều mã mà sau đó thử nghiệm cho một chút nào đó trong mặt nạ như
if ((mask & FLAG3) == FLAG3)
Nhưng isn Điều đó tương đương với điều này?
if (mask & FLAG3)
Có lý do nào để sử dụng phiên bản đầu tiên không? Theo tôi, phiên bản ngắn hơn thứ hai dễ đọc hơn.
Có thể các thói quen còn sót lại từ các lập trình viên C nghĩ rằng giá trị thực cần được chuyển đổi thành 1
? (Mặc dù ngay cả ở đó, phiên bản dài hơn có ý nghĩa hơn trong một bài tập hoặc tuyên bố return
hơn là trong bài kiểm tra tuyên bố có điều kiện.)
Làm ngay với mặt nạ & ALL_FLAGS. Không còn giống nhau nữa. –
'==' có ưu tiên cao hơn '&', vì vậy bạn cần dấu ngoặc đơn trong điều kiện của bạn: 'if ((mask & FLAG3) == FLAG3)'. – casablanca