Jesteś prawdopodobnie zna programu enum
bitową, jak:jeśli (maska i WARTOŚĆ) lub jeśli ((maska i WARTOŚĆ) == WARTOŚĆ)?
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
Widziałem dużo kodu, który następnie testy dla określonego bitu w masce jak
if ((mask & FLAG3) == FLAG3)
Ale ISN to odpowiednik tego?
if (mask & FLAG3)
Czy istnieje jakiś powód, aby korzystać z pierwszej wersji? Moim zdaniem druga, krótsza wersja jest bardziej czytelna.
Może resztki nawyków od programistów C, którzy myślą, że prawdziwe wartości powinny zostać przekonwertowane na 1
? (Chociaż nawet tam, dłuższa wersja ma większy sens w cesji lub return
oświadczenie niż w warunkowej badania sprawozdania).
Teraz zrób to z maską i ALL_FLAGS. Nie ma już tego samego. –
'==' ma wyższy priorytet niż 'i', więc potrzebujesz nawiasów w swoim stanie: 'if ((maska i FLAG3) == FLAG3)'. – casablanca