2

次のようにビット文字列をインクリメントする関数があります。

void increment(boost::dynamic_bitset<> &bitset)
{   
    for (int loop = 0; loop < bitset.size(); ++loop)
    {
        if ((bitset[loop] ^= 0x1) == 0x1)
        {
            break;
        }
    }
}

インクリメントが呼び出されるのと同じ方法で呼び出される関数が必要ですが、ビット文字列を別の方法で変更します。呼び出されるたびに、前のビット文字列と同じ数の 0 を持つ次のビット文字列を取得したいと考えています。

たとえば、ビット文字列の長さが 10 の場合、この関数の最初の 10 回の呼び出しでは、単一の 0 を含むビット文字列が返されます。その後、11 から 20 までの呼び出しで、2 つの 0 を含むビット文字列が返されます。ビット文字列がすべて 0 になるまで、これをずっと続けたいと思います。

どうすればそのような機能を設定できますか? ありがとう!

4

1 に答える 1

0

Matters Computationalの 1.24.3 章「Shifts-order」で答えを見つけることができます。整数をビットセットに変更し、値を反転する必要があります。おそらく、この実装は、ビットセットで使用する場合には最適ではありません。

于 2012-02-18T18:58:39.073 に答える