Já vi outras pessoas usando o Bitwise-OR para combinar sinalizadores antes:
#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04
const byte madPerson = RUN | JUMP | SHOOT;
Também é assim que eu faço.
Mas também vi alguns (não tantos) combinar bandeiras usando a adição:
#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04
const byte madPerson = RUN + JUMP + SHOOT;
Qual é mais "legível"? (Qual você acha que mais pessoas reconhecerão?) Qual é a maneira "padrão" de fazer isso? Qual você prefere?
1<<0
,1<<1
,1<<2
e assim por diante. Quando você tem muitos sinalizadores, ele se torna mais legível, mais sustentável e menos propenso a erros. Por exemplo, se você estiver compactando todos os 64 bits de um int de 64 bits, você realmente deseja evitar erros de digitação :) Como você representa1
também é importante. Para um número inteiro de 64 bits no VS2010, acho que é1UI64
, ou algo assim. Usar um tipo errado pode morder você.