签名或无符号长度为8x8游戏板c

时间:2013-08-24 15:45:43

标签: c types artificial-intelligence

我正在使用C语言编写一个Reversi游戏,我是该语言的新手(来自java),并且之前从未用8x8板编写游戏。我想使用位板代表白色和黑色玩家的游戏板(每个玩家一个64位字),我想知道我是否应该使用无符号长长度用于此目的。

据我所知,无符号类型是一个不使用leftMost位作为符号指示符的符号(0表示正数,1表示负数),我也知道java例如,仅支持签名类型。但在我的情况下,我需要使用最左边的位作为电路板的有效方块。如果我使用有符号类型或无符号类型是否重要?

例如,如果我在白色bitBoard的最后一个方格(最左边的位)放置一个白色的部分并且数字将变为负数,它可以吗?

1 个答案:

答案 0 :(得分:2)

是的,如果你正在用比特做事,你最好使用无符号。

请注意,{C}标准保证unsigned long long至少为64位。

看一下比特字段,在你的情况下非常方便;使用&|^,...来节省您的烦恼......

但这是一个想法:

#include <stdint.h>  // Thanks @DoxyLover
typedef struct
{
    uint8_t a : 1;
    uint8_t b : 1;
    uint8_t c : 1;
    uint8_t d : 1;
    uint8_t e : 1;
    uint8_t f : 1;
    uint8_t g : 1;
    uint8_t h : 1;
} BoardRow;

typedef struct
{
    BoardRow r1;
    BoardRow r2;
    BoardRow r3;
    BoardRow r4;
    BoardRow r5;
    BoardRow r6;
    BoardRow r7;
    BoardRow r8;
} Board;

void someFunction(void)
{
    Board board;

    board.r5.d = 1;
    ...

    // You can save these board in uint64_t if you like.
    uint64_t savedBoard = (uint64_t)board;
    ...
}