1. ホーム
  2. c++

[解決済み] マスクされた'ビットセットのインクリメント

2023-06-25 19:33:23

質問

現在、木の列挙器を書いている最中ですが、以下のような問題に出くわしました。

私はマスクされたビットセット、つまりセットビットがマスクのサブセットであるビットセットを見ています。 0000101 とマスク 1010101 . 私が達成したいことは、ビットセットをインクリメントすることですが、マスクされたビットに関してのみです。この例では、結果は次のようになります。 0010000 . もう少しわかりやすくするために、マスクされたビットだけを抽出する、つまり 0011 に増やし、それを 0100 に増やし、再びマスクビットに分配します。 0010000 .

ビットスキャンとプリフィックスマスクの組み合わせを使って手作業で操作を実装する以外に、これを行う効率的な方法があるでしょうか。

どのように解決するのですか?

マスク以外のビットを1で埋め、キャリー伝搬するようにすればよい。

// increments x on bits belonging to mask
x = ((x | ~mask) + 1) & mask;