繁体   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