國際象棋/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 表示法最初很流行,但它現在主要被 位板 系統所取代。