• ベストアンサー

空いているビットフラグの確認方法

空いているビットフラグの中で最小のものを見つけたいのですが、 うまい方法がわからず、どのように作成したら良いか、ご教授お願いします。 たとえば、 int nFlg = 0xFF8F; //上位16ビット省略 というフラグの場合、空いている(ビットフラグの無い)箇所は int nFalse = ~nFlg; // = 0x0070 で求められますが、この中から、最小のフラグ位置(0x0010)を求めたいのです。 (未使用のフラグの中から、使えるビットひとつを選びたいのです・・) 総当りしかないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

x = nFalse & (~nFalse+1); x = ~nFlg & (nFlg+1); でいいと思います。

pokapoka1980
質問者

お礼

+1でパタパタとフラグを目的の位置までひっくり返す感じでしょうか。 ありがとうございました。勉強になります。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

No1です。 >x = nFalse & (~nFalse+1); ~nFalse+1 って、 -nFalse でした。 x = nFalse & -nFalse;

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

((nFlg ^ (nFlg+1)) >> 1) + 1