I'm wondering what is the correct way to implement bitboards into a chess engine. So far I did some research on the basics of chess engine programming and took some notes, mostly stuff such as minimax, alphabeta, quiescence search and advanced evaluation functions.
Then I split my project into 3 parts which are:
I'm using bitboards to represent the board state, to save time both when representing the board and when calculating the gametree. This is where my problem lies.
Since I didn't just want to copy someone else's code, I tried to create an unsigned long
to test it out, but apparantly a single bit was lost.
Here's the code:
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);
}
Can someone give me a hint as to what I did wrong, and why I'm losing a bit?
In java a Long
will always be signed, the first bit(that you lost) determines if it is positive or negative. Long.parseUnsignedLong(...)
will only make sure that the value you pass is a positive number, not actually convert the datatype into an unsigned long.
EDIT: Nevermind. The above statement is incorrect. The issue you have is that you use the max value for a signed Long. The max value for an unsigned long is 18446744073709551615
.