0x88

0x88 체스 보드 표현컴퓨터 체스 프로그램에서 체스 보드를 나타내는 사각형 중심 방식이다. 136이라는 숫자는 십육진법 정수이다(13610, 2108, 100010002). 랭크와 파일 위치는 각각 니블(십육진수 한 자리)으로 표현되며, 비트 간격은 다수의 계산을 비트 연산으로 단순화한다.

레이아웃

0x88 보드 표현에서 레이아웃은 8x16 보드를 덮도록 확장되어 있으며, 이는 인접한 두 개의 체스 보드 크기와 같다. 8x16 행렬의 각 칸에는 보드 레이아웃 표에서 볼 수 있듯이 번호가 할당된다. 이 방식에서 각 니블은 랭크나 파일을 나타내므로, 8비트 정수 0x42는 0부터 시작하는 번호 매기기 방식에서 (4, 2) 칸, 즉 표준 대수기보법의 c5를 나타낸다.[1]

어떤 칸의 숫자에 16을 더하면 바로 위 행의 칸 번호가 되고, 16을 빼면 바로 아래 행의 칸 번호가 된다. 한 열에서 다른 열로 이동하려면 숫자를 1만큼 더하거나 뺀다.[2] 십육진법에서 합법적인 체스 위치(A1-H8)는 항상 0x88 미만이다. 이 레이아웃은 체스 프로그램이 수행해야 하는 많은 계산을 비교 대신 비트 연산을 사용하게 함으로써 단순화한다.[3]

0x88 보드 레이아웃[1]
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 65 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 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

대수기보법 및 변환

대수기보법이 표시된 체스 보드의 칸

체스 보드의 칸과 게임 내 수를 식별하는 현대 표준은 대수기보법이다. 여기서 보드의 각 칸은 고유한 좌표 쌍으로 식별되는데, 수평 좌표인 파일(file)은 a에서 h 사이의 문자로, 수직 좌표인 랭크(rank)는 1에서 8 사이의 숫자로 나타낸다.

컴퓨터 체스에서 파일-랭크 좌표는 내부적으로 0에서 7까지의 정수로 표현되며, a 파일은 0에 매핑되고 h 파일은 7에 매핑된다. 한편 랭크 좌표는 1만큼 낮춰져 0에서 7의 범위로 표현된다.

0x88 코딩 체계의 장점은 컴퓨터 프로세서가 처리하기에 간단하고 효율적인 비트 연산만을 사용하여 0x88 표현과 파일-랭크 좌표 간의 값을 쉽게 변환할 수 있다는 점이다. 0부터 시작하는 파일-랭크 좌표를 0x88 값으로 변환하는 식은 다음과 같다:

따라서 a1은 (8비트 모두 )에 대응하고, b2는 , h8은 에 대응한다.[1]

0x88 값을 파일-랭크 좌표 쌍으로 변환하는 식은 다음과 같다:

참고: 위 공식에서 '<<'와 '>>'는 각각 왼쪽 및 오른쪽 논리 시프트 연산을 나타내며, '&'는 비트 단위 AND를 나타낸다.

응용

보드 밖 탐지

보드 밖 탐지는 기물이 합법적인 체스 보드 안에 있는지 밖에 있는지 결정하는 체스 프로그램의 기능이다. 0x88에서 각 니블의 가장 높은 비트는 기물이 보드 위에 있는지 여부를 나타낸다. 구체적으로 칸을 나타내는 8비트 중에서, 4번째와 8번째 비트가 모두 0이어야 기물이 보드 내에 위치한다.[4] 이는 비트 단위 AND 연산을 통해 보드 밖 탐지를 가능하게 한다. 만약 $square AND 0x88 (이진수로 0b10001000)의 결과가 0이 아니라면, 해당 칸은 보드 위에 있지 않은 것이다.[5] 이 비트 연산은 정수 비교보다 적은 컴퓨터 자원을 필요로 하며, 이는 반칙 수 탐지와 같은 계산을 더 빠르게 만든다.[5]

칸의 관계

유효한 0x88 좌표 A와 B의 차이는 거리와 방향에 대해 고유한데, 이는 기존의 3비트 랭크 및 파일 좌표 방식에서는 성립하지 않는다. 이 덕분에 맨해튼 거리, 가능한 기물의 공격 경로, 합법적인 수 계산을 위한 조회가 더 효율적이다. 0~63 범위의 기존 좌표가 4K 크기의 테이블(64×64)을 요구하는 반면, 0x88 차이 방식은 그 1/16 수준인 256 크기의 테이블, 혹은 그보다 16 작은 크기만으로도 충분하다.[6]

119(최대 유효 칸 인덱스인 0x77)의 오프셋을 더하여 ±119를 0~238 범위(정렬상의 이유로 크기 240)로 만든다.[6]

0x88Diff = 0x77 + A − B

채택

0x88 표현은 초기에 인기가 있었지만, 현재는 대부분 비트보드 시스템으로 대체되었다.[7]

각주

  1. Hyatt 2013.
  2. Schalk 2008.
  3. Østensen 2016.
  4. Dailly 외. 2008.
  5. Reul 2009.
  6. Moreland 2007.
  7. Keen 2009.

참고 자료

외부 링크

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.