以位格式设置并获取多个信息

时间:2015-09-15 01:05:26

标签: c++ bits bitmask

我有这些位0010 1110 0101 0111。

目前,从7到11(从右到左)的位值是10011.我想将其设置为10110。我该怎么做?

1 个答案:

答案 0 :(得分:2)

此主题在嵌入式系统领域很常见。通常,硬件设备的制造商使用位字段来表示信息,例如状态。

插入您的号码

这涉及将您的号码(例如出生年份)左移到适当的位置,然后将该值与您的号码进行或运算:

unsigned int value;
//...
value |= (birth_year << 1);

提取或获取数字:

您需要使用掩码对数字进行AND运算,以便仅提取重要位。例如,检索性别:

unsigned int gender;
unsigned int value;
gender = value & 1;
// or 
gender = value & (~0);

您可能需要右移位以获得正确的值,例如在提取出生年份之后,将其右移1。

位字段结构

您可以让编译器通过在结构中使用位字段来计算所有这些,例如:

struct Compressed_Number
{
  unsigned int  gender : 1;
  unsigned int  birth_year : 11;
  //..
};

我个人更喜欢布尔算术版,因为你总是知道位位置。