2016-11-16 65 views
2

我想知道什麼是實現棋盤引擎的正確方法。到目前爲止,我對象棋引擎編程的基礎知識做了一些研究,並做了一些筆記,主要是諸如minimax,alphabeta,靜止搜索和高級評估函數等。如何正確使用位板

然後我拆我的項目分爲3個部分分別是:

  • GUI
  • 董事會代表
  • 實現超越極小極大搜索和未來的體面評估函數,靜態位置

我使用位板來表示棋盤狀態,以節省代表棋盤和計算遊戲樹時的時間。這是我的問題所在。

因爲我不只是要複製別人的代碼,我試圖創建一個unsigned long對其進行測試,但apparantly單個位丟失。

下面的代碼:

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); 
} 

有人可以給我一個提示,我做錯了什麼,爲什麼我失去了一點?

+0

所以基本上我試圖輸入一個很長的最大值然後我告訴程序給我的位數是'1'。我期望它給我64,但它拒絕這樣做,只給了我63,比我預期的少1。令人困惑... – JavaIsMyBae

+0

將最大長數增加1無助於此。如果我這樣做,方法Long.bitCount()返回'1'。 – JavaIsMyBae

回答

0

在java中,一個Long將始終進行簽名,第一位(您丟失的)確定它是正面還是負面。 Long.parseUnsignedLong(...)只會確保您傳遞的值是正數,而不是實際將數據類型轉換爲無符號長整數。

編輯:沒關係。上述說法不正確。您遇到的問題是您使用簽名Long的最大值。無符號長整數的最大值是18446744073709551615