2013-08-24 8 views
1

我在C編程一個Reversi遊戲,我是新來的語言(來自java),也從來沒有編寫過8x8板的遊戲。我想用位板來代表白色和黑色玩家的遊戲板(每個都有一個64位字),並且我想知道是否應該使用一個無符號long long來達到這個目的。簽名或無符號長爲8x8遊戲板在c

據我所知,無符號類型是一個不使用leftMost位作爲符號指示符(0表示正數,1表示負數),我也知道java例如只支持簽名類型。但在我的情況下,我需要使用最左邊的位作爲董事會的有效平方。如果我使用簽名類型或無符號類型那麼重要嗎?

例如,如果我在白色bitBoard的最後一個方塊(最左邊的位置)上放置一塊白色的塊並且該數字將變爲負數,它可以嗎?

回答

2

是的,如果你正在做點東西,你最好使用unsigned。

請注意,unsigned long long保證至少64位,由C標準。

看看位域,在你的情況非常方便;爲您節省位擺弄與&|^,...

但這裏有一個想法:

#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; 
    ... 
} 
+1

使用'#包括'和'型向uint64_t'保證64位的寬度。 – DoxyLover

+0

我想知道當他們想要編寫8x8棋盤遊戲並使用64位類型時他們在做什麼? – user2030118

+0

「需要」 - 我不這麼認爲。這個符號永遠不會「自行改變」,並且只要該數字從不被視爲*數字*(即對其進行計算;打印它),而僅僅是作爲一組比特,則沒有人會注意到它是「真正「簽名或無簽名,以及否定或肯定。 – usr2564301