我试图在一副扑克牌中代表52张牌。 我需要总共6位; 2为西装,4为排名。 我以为我会使用char并且前两位为零,因为我不需要它们。问题是我不知道是否有办法使用位来初始化char。
例如,我想做的是:
char aceOfSpades = 00000000;
char queenOfHearts = 00011101;
我知道一旦我初始化了char,我可以操作这些位,但如果我可以从头开始初始化它会更容易,如我的例子所示。提前谢谢!
答案 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
上使用各种位操作,但这更难处理。还有一个潜在的问题是它是实现定义的char
是signed
还是unsigned
- 如果它是signed
,bitfiddling操作在某些情况下会给出未定义的行为(例如,如果以负值运行)。
就个人而言,我不打算尝试将所有内容打包成char
。我会使代码易于理解(例如,使用枚举来表示sut,int
来表示排名),除非有明显的需求(例如,尝试让程序在内存非常有限的机器上工作 - 实际上不太可能使用不到20年的硬件)。否则,你真正实现的只是难以维护的代码,几乎没有现实世界的优势。