国际象棋/0x88
0x88 国际象棋棋盘表示法是一种以方格为中心的表示方法,用于表示一些 国际象棋程序 中的 国际象棋棋盘。数字 0x88(13610,2108,100010002)是 C 语法 中的十六进制整数。行列位置分别由一个半字节(十六进制数字)表示,位间隙简化了将许多计算转换为 位运算。
在 0x88 棋盘表示法中,布局被扩展到覆盖一个 8x16 的棋盘,相当于两个相邻的国际象棋棋盘的大小。8x16 矩阵中的每个方格都分配一个数字,如棋盘布局表所示。在这个方案中,每个半字节代表一个行列,因此 8 位整数 0x42 代表 (4,2) 处的方格 - c4。
对于一个方格,将其数字加 16 会得到上方方格的数字,减 16 会得到下方方格的数字。要从一列移动到另一列,数字增加或减少 1。在十六进制表示法中,合法的国际象棋位置(A1-H8)始终低于 0x88。这种布局简化了国际象棋程序需要执行的许多计算,因为它允许使用位运算而不是比较。
0x00 (A) | 0x01 (B) | 0x02 (C) | 0x03 (D) | 0x04 (E) | 0x05 (F) | 0x06 (G) | 0x07 (H) | 0x08 | 0x09 | 0x0A | 0x0B | 0x0C | 0x0D | 0x0E | 0x0F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x07 (8) | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 7A | 7B | 7C | 7D | 7E | 7F |
0x06 (7) | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 6A | 6B | 6C | 6D | 6E | 6F |
0x05 (6) | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 5A | 5B | 5C | 5D | 5E | 5F |
0x04 (5) | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
0x03 (4) | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
0x02 (3) | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |
0x01 (2) | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
0x00 (1) | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
国际象棋棋盘上的每个方格都由一个唯一的坐标对标识 - 一个字母(a 到 h)代表列,一个数字(1 到 8)代表行。这种指代方格的方法是 代数记谱 的一部分。要将坐标对转换为 0x88 值,列被视为整数,其中 a 对应于 0,h 对应于 7。
因此,a1 对应于 ,所有 8 位都设置为 ,b2 对应于 ,h8 对应于 .
要将 0x88 值转换为行列坐标对
棋盘外检测 是国际象棋程序的一项功能,它确定棋子是否在合法棋盘上或棋盘外。在 0x88 中,每个半字节的最高位表示棋子是否在棋盘上。具体来说,在表示方格的 8 位中,第四位和第八位必须都为 0,棋子才能位于棋盘内。这允许通过位 与 运算进行棋盘外检测。如果 $square AND 0x88
(或,在二进制中,0b10001000
)非零,则方格不在棋盘上。这种位运算比整数比较需要更少的计算机资源。这使得非法移动检测等计算更快。
有效 0x88 坐标 A 和 B 的差值在距离和方向方面是唯一的,这对于经典的打包三位行列坐标来说是不成立的。这使得 曼哈顿距离、可能的棋子攻击和合法棋子移动的查找更节省资源。虽然 0..63 范围内的经典方格坐标需要 4K(64*64)大小的表,但 0x88 差值需要 1/16 或 256 大小的表 - 甚至更少 16 个。
添加一个 119(0x77 作为最大有效方格索引)的偏移量,以使 +-119 成为 0..238 范围(出于对齐原因,大小为 240)。
0x88Diff = 0x77 + A - B
虽然 0x88 表示法最初很流行,但它现在主要被 位板 系统所取代。