0

ビットマスクがあるとしましょう

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の数値を保存したい

読んで助けてくれてありがとう。

4

1 に答える 1

1

値を未使用のビットにシフトアップすることができます。

値を保存するには:

mask |= val << 28;

値を取得するには:

val = mask >> 28;

シフト時に符号ビットが伝搬されないmaskようにする必要があることに注意してください。unsigned何らかの理由で signed int を使用する必要がある場合は、取得時に追加のマスキング操作を追加する必要がありますval

val = (mask >> 28) & 0x0f;
于 2013-07-25T10:59:57.217 に答える