我正在开发一个创建程序生成的地牢的游戏,我发现了一个使用位掩码来检索房间号和门类型等内容的示例。
在示例中,他使用位掩码从每个图块的整数中提取详细信息。整数是这样分解的
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)
在此他使用位掩码来获取例如房间号,例如:
int[][] map = new int[40][40]
int $ROOM_ID = 0x0000FF00;
System.out.println(map[x][y] & $ROOM_ID);
现在有了这个,如果 map[x][y] 是例如 0x00001200 输出将是 1200。我理解掩码的这一部分。
但是在源代码中 $ROOM_ID 是 ACTUALLY 0x0000FFC0 并且我不明白 C 做了什么,因为我尝试了不同的值,但我似乎无法抓住 C 的功能,例如
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?