我有这些位0010 1110 0101 0111。
目前,从7到11(从右到左)的位值是10011.我想将其设置为10110。我该怎么做?
答案 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;
//..
};
我个人更喜欢布尔算术版,因为你总是知道位位置。