Widziałem wcześniej, jak inni używają Bitwise-OR do łączenia flag:
#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04
const byte madPerson = RUN | JUMP | SHOOT;
Tak też to robię.
Ale widziałem także niektóre (nie tak wiele) łączące flagi przy użyciu dodawania:
#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04
const byte madPerson = RUN + JUMP + SHOOT;
Który jest bardziej „czytelny”? (Jak myślisz, który z nich rozpozna więcej osób?) Jaki jest „standardowy” sposób na zrobienie tego? Który wolisz?
1<<0
,1<<1
,1<<2
i tak dalej. Gdy masz wiele flag, staje się bardziej czytelny, łatwiejszy w utrzymaniu, mniej podatny na błędy. Na przykład, jeśli pakujesz wszystkie 64 bity 64-bitowej int, naprawdę chcesz uniknąć literówek :)1
Ważne jest również to, jak reprezentujesz . Wydaje mi się, że dla 64-bitowej liczby całkowitej w VS2010 jest1UI64
coś takiego. Użycie niewłaściwego typu może cię ugryźć.