2

我想知道在国际象棋引擎中实现位板的正确方法是什么。到目前为止,我对国际象棋引擎编程的基础知识做了一些研究并做了一些笔记,主要是诸如极小极大、字母表、静止搜索和高级评估函数之类的东西。

然后我把我的项目分成三个部分:

  • 图形用户界面
  • 董事会代表
  • 实现超越极小极大的搜索并为静态位置提供一个不错的评估函数

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

因为我不只是想复制别人的代码,所以我尝试创建一个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);
}

有人可以告诉我我做错了什么,以及为什么我会失去一点吗?

4

1 回答 1

0

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

编辑:没关系。上述说法是不正确的。您遇到的问题是您使用签名 Long 的最大值。unsigned long 的最大值是18446744073709551615

于 2016-11-16T07:47:38.677 回答