0

Cのこのコードに問題があります。

#include <stdio.h>
#include <stdint.h>

typedef uint64_t bboard;

// Accessing a square of the bitboard
int
get (bboard b, int square)
{
  return (b & (1ULL << square));
}

void
print_board (bboard b)
{
  int i, j, square;
  for (i = 7; i >= 0; i--) // rank => top to bottom
    {
      for (j = 0; j < 8; j++) // file => left to right
        printf ("%d ", get (b, j+8*i) ? 1 : 0);
      printf ("\n");
    }
}

int
main ()
{
  bboard b = 0xffffffffffffffff;
  print_board (b);
}

// result that I have
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 

さて、なぜビットボードはすべてのビットが1に設定されていないのですか?

ご不明な点がございましたら、コメントを追加してください。Ty:D

4

1 に答える 1

6

getを返しますがint(b & (1ULL << square))uint64_tです。(b & (1ULL << square))がより大きい場合、INT_MAX結果は未定義です。この場合、切り捨てて戻ります0

代わりにをget返す場合、これは期待どおりに機能します(ここで確認:http: //codepad.org/zEZiJKeR)。bboard

于 2011-11-09T21:10:09.363 に答える