• ベストアンサー

数値フラグの判定方法

ビットフラグの方法ではなく 数値フラグの計算というか判定の方法の話なのですが、 C++でファイルから設定を読み込む時、 1つの整数にフラグをまとめ様としているのですが、 パターン1  :1の位 10の位 100の位 1000の位・・・ とわけて位毎に3~5種程のフラグを持たせている場合の、10・100の位の取り出し方 パターン2  :On/Offだけで、1・2・4・8・16・32・・・・・とわけている場合の、2・4・8・16の部分の取り出し/判定方法 ビットでの操作はシンプルだったので理解できたのですが、 数値としての場合、どう計算すれば任意の場所を取り出せるのでしょうか? 初歩的な事かもしれませんが、検索しても計算方法を見つけきれませんでした; どなたか教えて頂けると幸いです。 っ_ _)っ

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

  • ベストアンサー
  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.2

パターン2について &演算子で判定できますよ. if(入力値 & フラグ値)~です. Cですけどこんな感じでテストしてみました. 4を引数にするとFlag4だけ,6だとFlag2とFlag4が出力されます. #include <stdio.h> #include <stdlib.h> void main(int argc, char *argv[]){   int flag = 1;   int inputNum = atoi(argv[1]);   while(flag<64){     if(inputNum & flag)printf("Flag %d\n",flag);     flag*=2;   } }

zaxs5968
質問者

お礼

下のコードの方はまだよく理解できませんでした。すみません; しかし、&単体で直接数値のビット判定(?)が出来るのですね。 初めて知りました。 かなりためになりました。ありがとうございますっ

その他の回答 (2)

  • wolf03
  • ベストアンサー率22% (241/1086)
回答No.3

100の位を取り出すなら1000で割った余りを100で割れば取れますが。

zaxs5968
質問者

お礼

! そ、その通りですね; ありがとうございますー! orz

  • bkbkb
  • ベストアンサー率33% (97/289)
回答No.1

パターン1 単純に10や100、1000で割ったらダメですかね? 3204なら1000で割れば3になりますよ。 パターン2 ビット見るのじゃダメですか? 数字でやるのは結構骨というか面倒ですね。

zaxs5968
質問者

お礼

上は、間の数が直接割ると数字1つになってくれなくて困っていました; 下はこう、なんというかわからないもどかしさが募っていて; ご助言、ありがとうございました~

関連するQ&A