我在C++中使用枚舉來製作使用二進制標誌的有限狀態機。它看起來像:如何使用超過max int的值允許枚舉?
enum VStates
{
NEUTRAL = 0x00000000, // 000000
// Physical Status
DRY = 0x00000001, // 000001
WET = 0x00000002, // 000010
HOT = 0x00000004, // 000100
COLD = 0x00000008, // 001000
BURNED = 0x00000016, // etc..
FROZEN = 0x00000032,
EROS = 0x00000064, //
THANATOS = 0x00000128, //
SLEEP = 0x00000256,
STUNNED = 0x00000512,
PARALYZED = 0x00001024,
POISONED = 0x00002048, //
BLIND = 0x00004096,
SOFT = 0x00008192, // Flexible
TOUGH = 0x00016384, // Resistent
MAGNETIZED = 0x00032768,
POSSEDERUNT = 0x00131072, //
// Mental Status
ANGRY = 0x00262144,
DRUGGED = 0x00524288, // Drugs Meaning
HORNY = 0x01048576, // Sexual Meaning
// Material Status
METAL = 0x02097152,
WOOD = 0x04194304,
GLASS = 0x08388608,
AIR = 0x16777216,
EARTH = 0x33554432,
DUST = 0x67108864,
LIGHT = 0x134217728,
SHADOW = 0x268435456,
WATER = 0x536870912,
// Total Status
PROTECTED = 0x1073741824,
INVULNERABLE = 0x2147483648
};
有些狀態是不兼容的,所以我使用位運算符來管理它們。現在,我的編譯器說:
warning: integer constant is too large for 'long' type
這是正確的方式來聲明這個枚舉?我喜歡避免警告,我該如何解決這個問題?
不是一個答案,但是這將是簡單得多寫和讀,如果值寫爲十六進制的常數。 –
@PeteBecker:他們實際上*是*寫成十六進制常量 - 但看起來他正在使用他應該用於十進制常量的數字(例如,他有0x00000512,它應該是512或0x200)。 –
@JerryCoffin - 哎呀。 –