Robię wyliczenie w C++, aby utworzyć skończoną maszynę stanów za pomocą flag binarnych. Wygląda na to:Jak dokonać wyliczenia z wartościami powyżej maksymalnej dozwolonej 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
};
Niektóre statusy są niekompatybilne, więc używam operatorów Bitwise do zarządzania nimi. Teraz mój kompilator mówi:
warning: integer constant is too large for 'long' type
Czy to jest właściwy sposób deklarowania tego wyliczenia? Lubię unikać ostrzeżenia, Jak mogę rozwiązać ten problem?
Nie jest to odpowiedź, ale byłoby to o wiele prostsze w pisaniu i czytaniu, jeśli wartości zostały zapisane w postaci stałych heksadecymalnych. –
@PeteBecker: Faktycznie * są * zapisane jako stałe heksadecymalne - ale wygląda na to, że używa cyfr, które powinien podać dla stałych dziesiętnych (np. Ma 0x00000512, co powinno być naprawdę 512 lub 0x200). –
@JerryCoffin - oops. –