2
チェスプログラミングのビットボードを初期化しています。しかし、私が黒のビットボードを初期化すると、何らかの理由でバイナリ出力が間違っています。ビットボード:16進数から16進数への変換
#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()、白bitboardsプリントアウト罰金の全てが、黒bitboardsを呼び出すときbpawnが前半のすべてのものとしたように。誰がなぜこれが起きているのかについてアドバイスをしていますか?
に、私はちょうど '<64> B(ボード)' BITSETない理由なぜあなたは 'stringstream'、と "もの" を行っているいかなる理由が見つかりませんか? – PcAF