Я видел, как другие использовали Bitwise-OR для объединения флагов раньше:
#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04
const byte madPerson = RUN | JUMP | SHOOT;
Я тоже так делаю.
Но я также видел некоторые (не так много) флаги объединения, используя сложение:
#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04
const byte madPerson = RUN + JUMP + SHOOT;
Какой из них более «читабелен»? (Как вы думаете, какой из них узнает больше людей?) Каков «стандартный» способ сделать это? Какой из них вы предпочитаете?
1<<0
,1<<1
,1<<2
и так далее. Когда у вас много флагов, он становится более читабельным, более легким в обслуживании, менее подверженным ошибкам. Например, если вы упаковываете все 64 бита 64-битного целого, вы действительно хотите избежать опечаток :) То, как вы представляете1
, также важно. Для 64-разрядного целого числа в VS2010 я думаю, что-то1UI64
, или что-то в этом роде. Использование неправильного типа может укусить вас.