Este artículo es parte de la serie sobre |
Programación de ajedrez |
---|
![]() |
Representaciones de la junta |
Computadoras de ajedrez |
Motores de ajedrez |
|
La representación del tablero de ajedrez 0x88 es un método centrado en el cuadrado para representar el tablero de ajedrez utilizado por algunos programas de ajedrez. El número 0x88 es un entero hexadecimal (136 10, 210 8, 10001000 2 ). Las posiciones de rango y archivo están representadas cada una por un nibble (dígito hexadecimal), y los espacios de bits simplifican una serie de cálculos a operaciones bit a bit.
Contenido
En la representación del tablero 0x88, el diseño se extiende para cubrir un tablero de 8 por 16, igual al tamaño de dos tableros de ajedrez adyacentes. A cada cuadrado de la matriz de 8 por 16 se le asigna un número, como se puede ver en la tabla de distribución del tablero. En este esquema, cada nibble representa un rango o un archivo, de modo que el entero de 8 bits 0x42 representa el cuadrado en (4,2) en numeración basada en cero, es decir, c5 en notación algebraica estándar.
Sumar 16 a un número para un cuadrado da como resultado el número para el cuadrado una fila arriba, y restar 16 da como resultado el número para el cuadrado una fila abajo. Para pasar de una columna a otra, el número aumenta o disminuye en uno. En notación hexadecimal, las posiciones legales de ajedrez (A1-H8) siempre están por debajo de 0x88. Este diseño simplifica muchos cálculos que los programas de ajedrez necesitan realizar al permitir operaciones bit a bit en lugar de comparaciones.
0x00 (a) | 0x01 (b) | 0x02 (c) | 0x03 (d) | 0x04 (e) | 0x05 (f) | 0x06 (g) | 0x07 (h) | 0x08 | 0x09 | 0x0A | 0x0B | 0x0C | 0x0D | 0x0E | 0x0F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x70 (8) | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 7A | 7B | 7C | 7D | 7E | 7F |
0x60 (7) | 60 | 61 | 62 | 63 | 64 | sesenta y cinco | 66 | 67 | 68 | 69 | 6A | 6B | 6C | 6D | 6E | 6F |
0x50 (6) | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 5A | 5B | 5C | 5D | 5E | 5F |
0x40 (5) | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
0x30 (4) | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
0x20 (3) | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |
0x10 (2) | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 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 |
Cada cuadrado de la tablero de ajedrez se identifica por un par único de coordenadas - una carta entre ( a y h ) para el archivo, y un número entre 1 y 8 para el rango. Este método de referirse a cuadrados es parte de la notación algebraica. Para convertir un par de coordenadas en un valor 0x88, los archivos se tratan como números enteros, con un correspondiente a 0 y h correspondiente a 7.
Por lo tanto, a 1 corresponde a, con los 8 bits establecidos en, b 2 corresponde a y h 8 corresponde a.
Para convertir un valor 0x88 en un par de coordenadas de archivo de clasificación:
La detección fuera del tablero es una característica de los programas de ajedrez que determina si una pieza está dentro o fuera del tablero de ajedrez legal. En 0x88, el bit más alto de cada nibble representa si una pieza está en el tablero o no. Específicamente, de los 8 bits para representar un cuadrado, el cuarto y el octavo deben ser ambos 0 para que una pieza se ubique dentro del tablero. Esto permite la detección externa mediante operaciones y bit a bit. Si $square AND 0x88
(o, en binario, 0b10001000
) es distinto de cero, entonces el cuadrado no está en el tablero. Esta operación bit a bit requiere menos recursos informáticos que las comparaciones de enteros. Esto hace que los cálculos, como la detección de movimientos ilegales, sean más rápidos.
La diferencia de las coordenadas 0x88 válidas A y B es única con respecto a la distancia y la dirección, lo que no es cierto para las coordenadas de archivo y rango de tres bits empaquetadas clásicas. Eso hace que las búsquedas de distancia de Manhattan, posibles ataques de piezas y movimientos de piezas legales sean más amigables con los recursos. Mientras que las coordenadas cuadradas clásicas en el rango 0–63 requieren tablas de tamaño 4K (64 × 64), la diferencia 0x88 requiere 1/16 o tablas de tamaño 256, o incluso 16 menos.
Se agrega un desplazamiento de 119 (0x77 como el índice cuadrado válido máximo), para hacer ± 119 un rango de 0-238 (un tamaño de 240 por razones de alineación).
0×88Diff = 0×77 + A − B
Aunque la representación 0x88 fue inicialmente popular, ha sido reemplazada principalmente por el sistema de bitboards.