I am creating a chess program and for the board representation I am using bitboards. The bitboard for white pawns looks like this:
whitePawns=0x000000000000FF00;
Now, if I want to move the white pawn on the square D4, I would have to shift the 12th bit by either 8 or 10 places so that it can get on to the next rank. I want to shift the 12th bit without disturbing the positions of the remaining bits. How do I do that?
After shifting the whitePawns variable should look this:
whitePawns=0x0000000008F700;
I think you don't want a shift, you want to swap to bits. Try turning bit A off and then turning bit B on. Something like this:
whitePawns &= ~(1 << A); // Turn bit A off
whitePawns |= (1 << B); // Turn bit B on
Where A and B are the positions of the bits you want to swap.
EDIT: Whether the move is valid or not is another story, make the move only if bit B is NOT set (and probably other conditions):
if (!(whitePawns & (1 << B))) {
// Make the swap.
}