位棋盘

一种由64个0或1指示位组成、每格对应一位,用来标记哪些格子属于指定集合的表示法。

解释

位棋盘 用一个64位数字表示国际象棋棋盘上的一组格子。位是一种只能取0或1的信息单位。由于棋盘有64格,可以为每个格子分配一位。

白兵掩码

8
7
6
5
4
3
2
a1
b
c
d
e
f
g
h
有效比特对应 、、 和 的白兵。
每格一个比特

固定的本地约定:按横线读取指示位,先从 到 ,再从 到 ,依次直到 和 。1表示该格属于集合。所示白兵集合:00000000/00000000/00000000/00000000/00000000/00101000/10000001/00000000。行棋方及其他FEN数据不属于此掩码。

值为1并不总是表示格子上有棋子,而是表示该格属于这个位棋盘所描述的集合。一个位棋盘可以标记全部白兵、某匹马攻击的每个格子、所有被占据的格子,或任何其他有用的集合。

马攻击掩码

8
7
6
5
4
3
2
a1
b
c
d
e
f
g
h
马的八个几何目的格构成该集合,即使它们都是空格。
没有棋子的置位

沿用相同的横线顺序约定。所示集合为 白马攻击的格子:00000000/00000000/00101000/01000100/00000000/01000100/00101000/00000000。即使这些格子上没有棋子,这些置位仍描述一种几何属性。

通常会同时维护多个位棋盘。按位运算直接组合0和1,可以用很少的处理器指令求集合交集、并集、移除格子或移动模式,从而支持快速生成着法和攻击。

攻击与占据的交集

8
7
6
5
4
3
2
a1
b
c
d
e
f
g
h
和 同时属于A与B: 车攻击这两个格子,并且各有一枚黑色棋子占据。
A与B的交集结果

按照已声明的横线顺序约定,A是 白车攻击的格子集合,B是黑色棋子占据的格子集合。所示集合为A与B的交集:00000000/00000000/00000000/00010000/00000000/00000000/00000000/00000001。有效比特对应 和 。 黑王属于B,但不属于A。

单个位棋盘本身不保存什么

  • 每一种棋子类型,除非由其他位棋盘提供这种区分。
  • 轮到哪一方走棋。
  • 权,也就是王与车的特殊着法是否仍被允许,以及吃过路兵是否可用,也就是兵能否进行这种特殊吃法。

一个完整局面会把这些事实与多个集合结合起来。位棋盘也不是 一类搜索方法,而是一种信息表示方式。

常见混淆

位棋盘与完整棋盘状态

一个位棋盘通常只描述一组格子。完整局面会把多个集合与其他状态信息结合起来。

位棋盘与位库

位棋盘表示一个局面中的格子,位库则保存许多残局局面的结果。

查看术语

来源

  1. 1.Bitboards, Chess Programming Wiki
  2. 2.bitboard.h, Stockfish

相关术语

© 2026 MindZug