enum APP_TYPE
{
// APP_Global 和 APP_None 值相同, APP_Global 只用于读取配置
APP_None = 0,
APP_Global = 0,
APP_DB_MGR = 1,
APP_GAME_MGR = 1 << 1,
APP_SPACE_MGR = 1 << 2,
APP_LOGIN = 1 << 3,
APP_GAME = 1 << 4,
APP_SPACE = 1 << 5,
APP_ROBOT = 1 << 6,
APP_APPMGR = APP_GAME_MGR | APP_SPACE_MGR,
APP_ALL = APP_DB_MGR | APP_GAME_MGR | APP_SPACE_MGR | APP_LOGIN | APP_GAME | APP_SPACE,
};
不能写成
APP_DB_MGR = 1,
APP_GAME_MGR = 2,
APP_SPACE_MGR = 3,
吗?
不可以,APP_APPMGR 和APP_ALL 需要用到上面的枚举类型做或运算(按位或运算)。
<<1的意思是左移1位
APP_DB_MGR = 1,
APP_GAME_MGR = 1 << 1,
APP_SPACE_MGR = 1 << 2,
APP_LOGIN = 1 << 3,
APP_GAME = 1 << 4,
APP_SPACE = 1 << 5,
APP_ROBOT = 1 << 6,
相当于:
APP_DB_MGR = 0x0000 0001,
APP_GAME_MGR = 0x0000 0010,
APP_SPACE_MGR = 0x0000 0100,
APP_LOGIN = 0x0000 1000,
APP_GAME = 0x0001 0000,
APP_SPACE = 0x0010 0000,
APP_ROBOT = 0x0100 0000,
这样按位做或运算的时候,就不会出现重复的值。
比如 APP_APPMGR = APP_GAME_MGR | APP_SPACE_MGR的值就是
APP_APPMGR = 0x0000 0010 | 0x0000 0100 = 0x0000 0110
至于 APP_GAME_MGR = 1 << 1,为什么不写成 APP_GAME_MGR = 0x0000 0001,这种样式,是因为,用1 << 1比用0x0000 0001更简洁,也不容易出错。当枚举元素多的时候,需要一个一个改数字1的位置,而如果用1<<1这种方式,只需要把<<右侧的1改成2、3、4、5...这样的,不容易出错,也更直观。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!