如何在 C++ 中初始化位板?

How to initialize bitboards in c++?

我已经仔细研究了 bit-board 上的国际象棋编程 wiki,但我仍在为我应该如何实际创建它们而苦苦挣扎。根据我收集到的信息,它们应该是 uint64_t 对吧?有时我看到它们表示为长的十六进制数字,就像在鳕鱼中一样,而其他时候我看到它们表示为 64 位二进制数。

例如,我如何获取一组棋盘位置并将其转换为每个棋子的位图,然后是颜色的两个位图?

终于可以像这样定义位板了:

typedef unsigned long long  U64; // supported by MSC 13.00+ and C99
#define C64(constantU64) constantU64##ULL    

U64 BBFullBoard  = 0xffffffffffffffffULL;

因为像 unsigned long long 这样的东西不能保证有任何特定的位数,所以在这里使用 cstdint 是个好主意,像这样:

#include <cstdint>
uint64_t board;

但是,使用 std::bitset 可能会以更少的努力生成更具可读性的代码:

#include <bitset>
#include <cassert>

class BitBoard {
 private:
  std::bitset<64> board;
 public:
  auto operator()(int x, int y){
    assert(0<=x && x<=7);
    assert(0<=y && y<=7);
    return board[8*y+x];
  }
  void setAll(bool val){
    if(val)
      board.set();   //All bits on
    else
      board.reset(); //All bits off
  }
};

int main(){
  BitBoard board;
}

我不确定哪一个会更高效。其他人发表了对性能的看法