2

ビットボードをチェスエンジンに実装する正しい方法は何だろうと思っています。これまでのところ、チェス エンジン プログラミングの基礎について調査し、ノートを取りました。主に、ミニマックス、アルファベット、静止検索、高度な評価関数などです。

次に、プロジェクトを次の 3 つの部分に分割します。

  • GUI
  • 取締役会の代表
  • ミニマックスを超える検索を実装し、静的位置の適切な評価関数に到達する

ボードを表すときとゲームツリーを計算するときの両方の時間を節約するために、ビットボードを使用してボードの状態を表しています。ここに私の問題があります。

誰かのコードをコピーするだけでは嫌だったので、試しに を作成しようとしましたunsigned longが、明らかに 1 ビットが失われていました。

コードは次のとおりです。

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 では、Long常に署名されます。最初のビット (失われたビット) によって、正か負かが決まります。Long.parseUnsignedLong(...)渡す値が正の数であることを確認するだけで、実際にデータ型を unsigned long に変換するわけではありません。

編集:気にしないでください。上記のステートメントは正しくありません。問題は、署名された Long の最大値を使用することです。unsigned long の最大値は です18446744073709551615

于 2016-11-16T07:47:38.677 に答える