簡體   English   中英

有沒有辦法使用位初始化char?

[英]Is there a way to initialize a char using bits?

我試圖代表一副撲克牌中的52張牌。 我需要總共6位; 2為西裝,4為排名。 我以為我會使用char並且前兩位為零,因為我不需要它們。 問題是我不知道是否有辦法使用位初始化char。

例如,我想做的是:

char aceOfSpades = 00000000;

char queenOfHearts = 00011101;

我知道一旦我初始化了char,我可以操作這些位,但如果我可以從頭開始初始化它會更容易,如我的例子所示。 提前致謝!

是的你可以:

例,

  char aceOfSpades = 0b00000000;
  char queenOfHearts = 0b00011101;

正如Captain Oblivious在評論中所說的那樣,更簡單的方法就是使用一點點字段

struct SixBits
{
     unsigned int suit : 2;
     unsigned int rank : 4;
};

int main()
{
     struct SixBits card;
     card.suit = 0;        /*  You need to specify what the values mean */
     card.rank = 10;
}

你可以嘗試在char上使用各種bit fiddling操作,但這更難以使用。 還有一個潛在的問題是,無論char是有signed還是unsigned ,它都是實現定義的 - 如果有signed ,bitfiddling操作在某些情況下會給出未定義的行為(例如,如果在負值下運行)。

就個人而言,我不打算嘗試將所有東西都裝入char 我將使代碼易於理解(例如,使用枚舉來表示sut, int來表示排名),除非有明顯的需求(例如,試圖讓程序在內存極其有限的機器上工作 - 這在實踐中不太可能硬件不到20年)。 否則,你真正實現的只是代碼難以維護,幾乎沒有現實世界的優勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM