使用十六进制来确定变量值的特殊含义是什么?
#define SPAWNFLAG_NOT_EASY 0x00000100
#define SPAWNFLAG_NOT_MEDIUM 0x00000200
#define SPAWNFLAG_NOT_HARD 0x00000400
#define SPAWNFLAG_NOT_DEATHMATCH 0x00000800
#define SPAWNFLAG_NOT_COOP 0x00001000
它是否以某种方式加快了机器级别的工作,或者它有一些优势?我经常看到这样的代码,尤其是在游戏项目中。为什么是十六进制?为什么没有其他方法?
使用十六进制值指定单个位很方便,因为它们直接转换为二进制位,但同时它们更紧凑。您可以立即看到
SPAWNFLAG_NOT_EASY
第 8 位和SPAWNFLAG_NOT_COOP
第 12 位的设置。但是,没有什么可以阻止将相同的内容写入十进制常量:原则上,受过训练的眼睛会立即突出 2 的幂,但仍然不是那么清晰,特定位的位置也不是那么明显。
C++14 引入了二进制文字和用撇号分隔组的能力,因此您的示例可以这样编写:
也许当习惯了十六进制数字的一代最终消亡时,这种形式会被广泛使用。