Я использую битовые флаги в командах игрока в игре, чтобы решить, следует ли им разрешить их выполнение или нет.Итак, список битовых флагов выглядит примерно так:
CMD_NONE = 0x0,
CMD_TELEPORT = 0x1,
CMD_VIP = 0x2,
CMD_NO_LOG = 0x4, // don't log the execution of this command
И что я хочу сделать, это сделать несколько функций / макросов, чтобы упростить вещи, потому что я хочу проверить, скажем, команда установила CMD_TELEPORT
или CMD_VIP
и ничего больше, поэтому и CMD_TELEPORT
, и CMD_VIP
являются необязательными и могут быть включены или выключены, но что-либо еще нельзя включить одновременно.
Пока что я проверял это вручную, но это задница.Я не могу использовать
if (flags == (CMD_TELEPORT | CMD_VIP)
, потому что он проверяет, установлены ли одновременно оба флагов, и я хочу, чтобы они были фактически единственными флагами, которые может быть установленным, но не обязательно одновременно.Так что это либо CMD_NONE, CMD_TELEPORT, CMD_VIP, либо (CMD_TELEPORT | CMD_VIP)
Я мог бы сделать некоторый цикл и проверить каждый из флагов, если он установлен, и уменьшить его из значения флага и проверить, осталось ли что-нибудь, но яЯ надеюсь, что есть более простой способ сделать это.