我正在使用C语言编写一个Reversi游戏,我是该语言的新手(来自java),并且之前从未用8x8板编写游戏。我想使用位板代表白色和黑色玩家的游戏板(每个玩家一个64位字),我想知道我是否应该使用无符号长长度用于此目的。
据我所知,无符号类型是一个不使用leftMost位作为符号指示符的符号(0表示正数,1表示负数),我也知道java例如,仅支持签名类型。但在我的情况下,我需要使用最左边的位作为电路板的有效方块。如果我使用有符号类型或无符号类型是否重要?
例如,如果我在白色bitBoard的最后一个方格(最左边的位)放置一个白色的部分并且数字将变为负数,它可以吗?
答案 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;
...
}