如何正确使用位板

时间:2016-11-16 07:38:07

标签: java bitboard ulong

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

然后我将我的项目分成3个部分:

  • GUI
  • 董事会代表
  • 实现超越极小极大的搜索,并为静态位置提供合适的评估功能

我正在使用位板代表电路板状态,以便在代表电路板和计算游戏树时节省时间。这就是我的问题所在。

由于我不只是想复制其他人的代码,我试图创建一个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);
}

有人能否给我一个关于我做错了什么的提示,以及为什么我会失去一点?

1 个答案:

答案 0 :(得分:0)

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

编辑:没关系。以上陈述不正确。您遇到的问题是您使用签名Long的最大值。无符号长整数的最大值为18446744073709551615