Zgodnie z witryną this, chcę reprezentować labirynt z dwuwymiarową tablicą 16-bitowych liczb całkowitych.Jak korzystać z flag bitowych w C++?
Każda 16-bitowa liczba całkowita musi posiadać następujące informacje:
Oto jeden ze sposobów, aby to zrobić (jest to bynajmniej jedyny sposób): siatka 12x16 labirynt może być reprezentowana jako tablica m [ 16] [12] z 16-bitowych liczb całkowitych. Każdy element tablicy będzie zawiera wszystkie informacje dla jednej odpowiedniej komórki w sieci, przy czym bity liczby całkowitej odwzorowanych tak:
alt text http://www.mazeworks.com/mazegen/mazetut/tut5.gif
strącić ścianie ustawienia granicy albo stanowi szczególne ścieżkę wszystko, co musimy zrobić, to odwrócić bity w jednym lub dwóch elementach tablicy.
Jak używać bitowych flag na 16-bitowych liczbach całkowitych, więc mogę ustawić każdy z tych bitów i sprawdzić, czy są ustawione.
Chciałbym zrobić to w łatwy do odczytania sposób (np. Border.W, Border.E, Walls.N, itp.).
Jak to zwykle robi się w C++? Czy używam szesnastkowych znaków do reprezentowania każdego z nich (np. Walls.N = 0x02, Walls.E = 0x04 itd.)? Czy powinienem używać enum?
Zobacz także How do you set, clear, and toggle a single bit?.
Niestety nie jest to przenośne, ponieważ kolejność bitów jest specyficzna dla kompilatora. –
Ponadto, nie jestem pewien, czy bool jest obsługiwanym typem dla bitfields, byłby bardziej przenośny, gdyby niepodpisany został użyty. –
yes bool jest obsługiwany dla bitfieldów, ale masz rację, ich zamawianie jest całkowicie zależne od kompilatora i zwykle kojarzone z endianess – KPexEA