2

さて、質問があります。オプション用のビットマスクを組み立てました。基本的に、私のページには、整数のリスト (ID 値) に格納する複数の選択を可能にするリスト ボックスがあります。全部で 14 の選択肢があります (ID val 1-15)。これをビット マスクにアセンブルしている理由は、データベース テーブル (リストボックスの作成元) にオプションを追加する場合に備えて、数値をハード コードしたくないためです。また、SQL ストアド プロシージャに 14 個のパラメーターを送信したくありません (したがって、14 個の数値をハードコーディングします)。この整数を送信して分解できます (後のステップ)。

ただし、現在、別の理由で整数に設定されているビットを見つける必要があります。基本的に私は財産を持っています。get は、(ユーザー選択から取得した) 整数のリストからビット マスクを組み立て、その 2 進 10 進数値の整数を返します。これは、ビットマスクを作成するために組み立てたコードです。

//optsNum is my integer list. This is the list containing the ID nums of the selections.
//so if the user selects the first, second, and fourth option, the list contains 1,2,4 (count 3)
//typeCount is an integer of the amount of options in the list box
int total = 0;
for (int c = 0; c < optsNum.Count(); ++c)
{
    for (int i = 0; i <= typeCount; i++)
    {
        if ((i + 1) == optsNum[c})
            total += (1 << i);
    }
}
return total;

したがって、1 番目、2 番目、4 番目が設定されている場合、私の整数は 11 です。

今、私は私の設定方法を作る助けが必要です. これは、私が持っている小数/整数を取得し、設定されているビットを見つけて、それらをリストに戻す必要があります。したがって、値が 11 の場合、整数 1、2、4 のリストに入れる必要があります。誰でも私を助けることができますか?

4

1 に答える 1

4

代わりにBitArrayクラスを使用する必要があります。それはあなたのためにビット単位の操作を行い、シンプルなインターフェースを備えています.
32 を超えるブール値が必要ない場合は、より小さいBitVector32classを使用することもできます。


あなたの質問に答えるには、(単純な aforループを使用して)すべてのビットをループし、 th ビットが設定されvalue & (1 << i)ているかどうかを確認する必要があります。i

于 2010-11-24T15:24:58.073 に答える