質問: 1 << 100」を追加しようとすると ``` (ファイルパス+ファイル名):(行):(列?): warning: left shift count >= width of type [- shift-count-overflow] ... ``` とコンパイルエラー。 int ( 厳密には unsigned intですが。 ) なので 100 は 範囲内だと思うのですが... もしかして こういうビット演算用定数 は 何十 ( 大体 30前後? ) までしかできないのでしょうか? もし可能なら ファイル ( ディレクトリ を含んでもいいですが。 ) を列挙する関数 ( あるいはクラス? )を作成して、 「JPGファイル, BMPファイル, PNGファイル, GIFファイル ... を列挙対象にする」みたいに できるのですが... 拡張子は私が聞いたことがある ( よく使う ) ものだけでも 100ぐらいありそうですし。 ( そこまではいかなくても、使える範囲が広がるし。 ) 知りたいことは、簡単に言えば、 「**パターンを考えずに抽出&処理をし、また定数の個数が100や1000でも耐えうるビット演算方法**」 です。 [情報] 言語 : C/C++ WinAPI : あり ( ただ、今回はあまり関係ないかも... ) コンパイラ: MinGW ( 同上 ) 宜しくお願い致します。
回答: 冒頭のenumの部分でお聞きしたいのですが、 ``` enum TEST_ENUM{ TEST_DEFALUT = 0, TEST_ENUM_TYPE1 = 1, TEST_ENUM_TYPE2 = 2, ... TEST_ENUM_TYPE100 = 6 }; ``` `TEST_ENUM_TYPE3`と`TEST_ENUM_TYPE4`の定義を教えてください。 もし、以下のように書いているならばビットフラグの定義をもう一度確認して下さい。 ``` enum TEST_ENUM{ TEST_DEFALUT = 0, TEST_ENUM_TYPE1 = 1, TEST_ENUM_TYPE2 = 2, TEST_ENUM_TYPE3 = 3, TEST_ENUM_TYPE4 = 4, TEST_ENUM_TYPE5 = 5, TEST_ENUM_TYPE100 = 6 }; ``` 正しく書くのであれば以下のようになります。 ``` enum TEST_ENUM{ TEST_DEFALUT = 0, TEST_ENUM_TYPE1 = 1, TEST_ENUM_TYPE2 = 2, TEST_ENUM_TYPE3 = 4, TEST_ENUM_TYPE4 = 8, TEST_ENUM_TYPE5 = 16, ... }; ``` ビットフラグの値は2の乗数でなければなりません、2進数の定義と&演算の定義を確認してください。 通常、2の乗数を計算するのは面倒なので、参考にしている`C#`のサイトのようにシフト演算するのが一般的です。 >「パターンを考えずに抽出&処理をし、また定数の個数が100や1000でも耐えうるビット演算方法」 2の1000乗のパターンが必要なのでしょうか?これは天文学的な数値です。 通常、ファイルの拡張子を判別する用途であればビットフラグは使いません、拡張子はGIFでありTXTであるなどの組み合わせの状態がないので、ビットフラグの用途ではありません。