如何通过位掩码存储和检索3位数?

时间:2013-07-25 10:55:23

标签: c++ bitmask

假设我有一个位掩码

enum ExampleMask
{       
   Attribute1 = 1 << 1,
   Attribute2 = 1 << 2,
   ...
   Attribute27 = 1 << 27
}

所以我已经使用了32个可用位中的27个。

我现在希望除了使用位掩码的标志外,还能够存储和检索3位无符号整数。

例如:

// Storing values
int mask =  Attribute2 | Attribute6 | Attribute18; // Saving some attributes
int mask |= ???? // How to save the number 8?

// Retrieving values
if(mask & Attribute2) do something...;
if(mask & Attribute6) do something...;
int storedValue =  ???? // How to retrieve the 8?

基本上我想在我的位掩码中保留3位来保存0到8之间的数字

感谢您花时间阅读和帮助。

1 个答案:

答案 0 :(得分:1)

您可以将值向上移动到未使用的位,例如

存储值:

mask |= val << 28;

要检索值:

val = mask >> 28;

请注意,mask应该是unsigned,以避免在移位时传播符号位。如果由于某种原因必须使用signed int,那么在检索val时应该添加额外的屏蔽操作,例如

val = (mask >> 28) & 0x0f;