Я инициализирую битборды для шахматного программирования. Однако, когда я инициализирую черные битборды, двоичный вывод по какой-то причине некорректен.
Ниже приведен код:
#include <stdint.h>
#include <inttypes.h>
#include <sstream>
#include <bitset>
#include <string>
uint64_t wpawn, wknight, wbishop, wrook, wqueen, wking, bpawn, bknight, bbishop, brook, bqueen, bking;
using namespace std;
void printBoard(uint64_t board)//print binary form of hexadecimal
{
printf("\n");
stringstream ss;
ss<<board;
unsigned x;
ss>>x;
bitset<64>b(x);
string tmp = b.to_string();
int count =0;
for (int i =0; i < 8; i ++)
{
printf("\n");
for (int j=0;j <8;j++)
{
printf("%c ",tmp[count]);
count ++;
}
}
}
void printAll()//print all boards
{
printf("\nwhite\n");
printBoard(wpawn);
printBoard(wknight);
printBoard(wbishop);
printBoard(wrook);
printBoard(wqueen);
printBoard(wking);
printf("\nblack\n");
printBoard(bpawn);
printBoard(bknight);
printBoard(bbishop);
printBoard(brook);
printBoard(bqueen);
printBoard(bking);
}
int main(int argc, char *argv[])
{
wpawn = 0x000000000000FF00;//initialize boards
wknight=0x0000000000000042;
wbishop=0x0000000000000024;
wrook = 0x0000000000000081;
wqueen =0x0000000000000010;
wking = 0x0000000000000008;
bpawn = 0x00FF000000000000;
bknight=0x4200000000000000;
bbishop=0x2400000000000000;
brook = 0x8100000000000000;
bqueen =0x1000000000000000;
bking = 0x0800000000000000;
printBoard(wpawn);//white pawn
printBoard(bpawn);//black pawn
}
Вывод следующий:
white
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0Black
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
При вызове printAll () распечатываются все белые битборды, но черные битборты распечатываются так же, как bpawn с первой половиной. У кого-нибудь есть совет, почему это происходит?
менять
unsigned x;
в
uint64_t x;
Других решений пока нет …