Según el sitio web this, deseo representar un laberinto con una matriz bidimensional de números enteros de 16 bits.¿Cómo se utilizan las marcas bit a bit en C++?
Cada número entero de 16 bits tiene que contener la siguiente información:
He aquí una manera de hacerlo (esto es de ninguna manera la única manera): una rejilla de 12x16 laberinto puede representarse como una matriz m [ 16] [12] de enteros de 16 bits. Cada elemento de la matriz haría contiene toda la información para una sola celda correspondiente en la red, con los bits de número entero mapeadas como esto:
alt text http://www.mazeworks.com/mazegen/mazetut/tut5.gif
para derribar una pared, establecer una frontera, o cree un camino particular, todo lo que tenemos que hacer es voltear bits en uno o dos elementos de la matriz.
Cómo uso banderas de bits en enteros de 16 bits para poder establecer cada uno de esos bits y verificar si están configurados.
Me gustaría hacerlo de una manera fácil de leer (es decir, Border.W, Border.E, Walls.N, etc.).
¿Cómo se hace esto generalmente en C++? ¿Uso hexadecimal para representar cada uno (es decir, Walls.N = 0x02, Walls.E = 0x04, etc.)? ¿Debo usar una enumeración?
Véase también How do you set, clear, and toggle a single bit?.
lamentablemente esto no es portátil ya que el orden de los bits es específico del compilador. –
Además, no estoy seguro si bool es un tipo soportado para bitfields, sería más portable si se usa unsigned. –
sí bool es compatible con bitfields, pero está en lo cierto, el orden de ellos depende totalmente del compilador y generalmente está asociado con endianess – KPexEA