有没有办法使用位初始化char?

时间:2016-02-20 21:45:35

标签: c++

我试图在一副扑克牌中代表52张牌。 我需要总共6位; 2为西装,4为排名。 我以为我会使用char并且前两位为零,因为我不需要它们。问题是我不知道是否有办法使用位来初始化char。

例如,我想做的是:

char aceOfSpades = 00000000;

char queenOfHearts = 00011101;

我知道一旦我初始化了char,我可以操作这些位,但如果我可以从头开始初始化它会更容易,如我的例子所示。提前谢谢!

2 个答案:

答案 0 :(得分:6)

是的,你可以:

例如,

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

答案 1 :(得分:4)

正如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上使用各种位操作,但这更难处理。还有一个潜在的问题是它是实现定义的charsigned还是unsigned - 如果它是signed,bitfiddling操作在某些情况下会给出未定义的行为(例如,如果以负值运行)。

就个人而言,我不打算尝试将所有内容打包成char。我会使代码易于理解(例如,使用枚举来表示sut,int来表示排名),除非有明显的需求(例如,尝试让程序在内存非常有限的机器上工作 - 实际上不太可能使用不到20年的硬件)。否则,你真正实现的只是难以维护的代码,几乎没有现实世界的优势。