c中8x8游戏板的有符号或无符号长字符

c中8x8游戏板的有符号或无符号长字符,c,types,artificial-intelligence,C,Types,Artificial Intelligence,我正在用C语言编写一个Reversi游戏,我对这门语言是新手(来自java),也从未用8x8板编写过游戏。我想使用位板来表示白人和黑人玩家的游戏板(每个64位单词),我想知道是否应该使用无符号的long-long 据我所知,无符号类型是不使用最左边的位作为符号指示符的类型(0表示正,1表示负),我还知道java仅支持有符号类型。但在我的例子中,我需要使用最左边的位作为电路板的有效方块。我使用有符号类型还是无符号类型有关系吗 例如,如果我在白色位板的最后一个正方形(最左边的位)上放置一个白色块,数

我正在用C语言编写一个Reversi游戏,我对这门语言是新手(来自java),也从未用8x8板编写过游戏。我想使用位板来表示白人和黑人玩家的游戏板(每个64位单词),我想知道是否应该使用无符号的long-long

据我所知,无符号类型是不使用最左边的位作为符号指示符的类型(0表示正,1表示负),我还知道java仅支持有符号类型。但在我的例子中,我需要使用最左边的位作为电路板的有效方块。我使用有符号类型还是无符号类型有关系吗


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

是的,如果您使用位进行操作,最好使用unsigned


注意,根据C标准,
unsigned 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;
    ...
}
#包括//谢谢@DoxyLover
类型定义结构
{
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:1;
uint8_t h:1;
}波德罗;
类型定义结构
{
木板路r1;
BoardRow r2;
BoardRow r3;
BoardRow r4;
BoardRow r5;
BoardRow r6;
BoardRow r7;
BoardRow r8;
}董事会;
void函数(void)
{
董事会;
线路板r5.d=1;
...
//如果愿意,您可以将这些板保存在uint64\t中。
uint64_t savedBoard=(uint64_t)板;
...
}

使用
#包含
并键入
uint64\u t
以保证64位宽度。我想知道当他们想编程一个8x8棋盘游戏并使用64位类型时,在Java中做什么?“需要”--我不这么认为。符号永远不会“自行”改变,只要数字从未被视为数字(即,对其进行计算;打印),而只是作为一组位,那么没有人会注意到它是“真的”有符号或无符号的,和负或正。@user2030118:使用数组?
无符号长
根据标准保证至少为64位宽