まず第一に、これが可能かどうかを知りたいです: 数に含まれている場合と含まれていない場合がある、いくつかの未署名のショートを含む unsigned long があるとしましょう。例えば:
unsigned short int id1 = 3456,
id2 = 30998;
unsigned long long bitfld = id1|id2;
他の 2 つのフィールドを 0 と見なすことはできますか? また、OR はこれに適した操作ですか? その後、引数として bitfld を渡すとしましょう:
void dostuff (unsigned long long bf)
{
//pseudo code
if( the first field exists in bf)
get first field;
if( the second field exists in bf)
get second field;
//etc...
}
ビットフィールドの最初の16ビットをポーリングしてチェックし、再帰的にポーリングして検証し、0より大きい場合は保存する必要があると思います。しかし、これを行う方法がわかりません。ビットシフトのみのシフト左または右、したがって、除算または乗算のみですよね?
ぶつけてごめんなさい。ご回答いただきありがとうございますが、最終的にはよりシンプルで効率的な方法である内部構造を使用することになりました。おわかりのように、これは文字列を使って簡単に行うことができましたが、私の目的はコードのユーザーへの透明性、つまり簡単にプログラムできるようにすることでした。値を保持する内部構造を作成し、そのような構造を作成して返す public メソッドを作成したので、使いやすく、解析が高速です (ただし、スタックに (小さいとはいえ) 構造を割り当てるオーバーヘッドがあります。ビット フィールド ソリューションにはありませんが、悲しいかな)。
それでは皆様、ご回答ありがとうございます。