1

我正在用 C 语言编写黑白棋游戏,而且我是该语言的新手(来自 java),而且以前从未用 8x8 板编写过游戏。我想使用位板来代表白人和黑人玩家的游戏板(每个 64 位字),我想知道我是否应该为此目的使用 Unsigned long long。

据我所知,无符号类型是不使用 leftMost 位作为符号指示符的类型(0 表示正数,1 表示负数),例如,我也知道 java 仅支持有符号类型。但就我而言,我需要使用最左边的位作为板的有效方块。我使用有符号类型还是无符号类型有关系吗?

例如,如果我在白色位板的最后一个方格(最左边的位)上放置一个白色块,数字将变为负数,可以吗?

4

1 回答 1

2

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

请注意,unsigned long longC 标准保证至少为 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;
    ...
}
于 2013-08-24T15:47:25.813 回答