Bitboard: шестнадцатеричное преобразование в двоичное

Я инициализирую битборды для шахматного программирования. Однако, когда я инициализирую черные битовые доски, двоичный вывод по какой-то причине неверен.

Ниже приведен код:

#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 0 


Black
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 делала с первой половиной всех своих. У кого-нибудь есть совет, почему это происходит?


person Community    schedule 07.05.2016    source источник
comment
Кроме того, я не вижу причин, по которым вы занимаетесь вещами с stringstream, а не просто с bitset<64>b(board)?   -  person PcAF    schedule 08.05.2016


Ответы (1)


изменить unsigned x;

to uint64_t x;

person Jason Ball    schedule 07.05.2016