如何正确使用位板

How to properly use bitboards

我想知道在国际象棋引擎中实现位板的正确方法是什么。到目前为止,我对国际象棋引擎编程的基础知识进行了一些研究并做了一些笔记,主要是诸如 minimax、alphabeta、静态搜索和高级评估函数等内容。

然后我将我的项目分成 3 个部分,它们是:

我使用位板来表示棋盘状态,以在表示棋盘和计算游戏树时节省时间。这就是我的问题所在。

因为我不只是想复制别人的代码,所以我尝试创建一个 unsigned long 来测试它,但显然丢失了一点。

代码如下:

public static void main(String[] args) {
    Long bitBoard = Long.parseUnsignedLong("9223372036854775807");

    System.out.println("Number of bits in this 64-bit unsigned long: " + Long.bitCount(bitBoard));  
    System.out.println(Long.MAX_VALUE);
}

谁能告诉我我做错了什么,为什么我输了一点?

在java中,Long总是有符号的,第一位(你丢失的)决定它是正数还是负数。 Long.parseUnsignedLong(...)只会确保您传递的值是正数,不会实际将数据类型转换为无符号长整型。

编辑:没关系。上述说法是错误的。您遇到的问题是您对带符号的 Long 使用了最大值。 unsigned long 的最大值是 18446744073709551615.