I am working on a game that creates procedurally created dungeons, I found an example that uses bit masking to extract things like room number and door type.
In this example, he uses a bitmask to extract parts from an integer for each fragment. and the integer is broken as follows
0xLLSDRRET
L - is the Level Number
S - Denotes a special tile(Like Stairs)
D - is if its a door, and what type(Door, Arch, Trapped)
R - Room number
E - Flags an entrance to a room
T - Names the type of tile(Floor, Cooridor, Blocked)
In this, he uses a bitmask to get, for example, the room number, for example:
int[][] map = new int[40][40]
int $ROOM_ID = 0x0000FF00;
System.out.println(map[x][y] & $ROOM_ID);
Now with this, if map [x] [y] was, for example, 0x00001200, the output would be 1200. This is the part of the Masks that I understand.
But in the original $ ROOM_ID ACTUALLY 0x0000FFC0, and I don’t understand what C does, because I tried different values, and I can’t understand what C does, for example
0x00001200 output-> 1200
0x00001210 output-> 1200
0x00001220 output-> 1200
0x00001230 output-> 1200
0x00001240 output-> 1240
0x00001250 output-> 1240
0x00001260 output-> 1240
0x00001270 output-> 1240
0x00001280 output-> 1280
0x00001290 output-> 1280
0x000012A0 output-> 1280
0x000012B0 output-> 1280
0x000012C0 output-> 12C0
0x000012D0 output-> 12C0
0x000012E0 output-> 12C0
0x000012F0 output-> 12C0
- , 0x0000FFC0 0x000012F0 = 12C0?