-3

私は C++ でビットセット クラスを試していましたが、例として 137 という数字を使ってこれを試してみました。 bitarray と呼ばれる別のビット インスタンスがあり、bitarray でそれが表示されることを期待していましたが、正しい値が得られませんでした。何が問題だったのでしょうか?137バイナリ表現の残りのビットからMSBを分割しようとしていました...コードは次のとおりです。

bitset<8> bitarray;

bitset<8> bitsetObject(num);
int val = bitsetObject.size();

for (int i = 0; i <= (val - 1); i++)
{
    if (i == 6)
        break;
    else
        bitarray[i] = bitsetObject[i + 1];
}

bitsetObject 配列の 2 番目の要素から最後の要素まで簡単にスライスする方法を知っている人がいたら教えてください。ありがとう..

4

2 に答える 2

2

bitset最上位セット ビットをリセットして新しいオブジェクトを作成しようとしているだけの場合は、次の点を考慮してください。

template<std::size_t N>
std::bitset<N> strip_mssb(std::bitset<N> bitarray)
{
    for (std::size_t i = bitarray.size(); i--;)
        if (bitarray[i])
        {
            bitarray.reset(i);
            break;
        }
    return bitarray;
}

オンラインデモ。

于 2012-09-21T21:33:13.123 に答える
1

bitarray[0]に等しい を設定しますbitsetObject[1]。これは 0 です (num実際には 137 であると仮定します)。

の最小ビットがbitarray1 に等しいことを期待しているようです。

于 2012-09-21T21:30:28.773 に答える