- ベストアンサー
数値フラグの判定方法
ビットフラグの方法ではなく 数値フラグの計算というか判定の方法の話なのですが、 C++でファイルから設定を読み込む時、 1つの整数にフラグをまとめ様としているのですが、 パターン1 :1の位 10の位 100の位 1000の位・・・ とわけて位毎に3~5種程のフラグを持たせている場合の、10・100の位の取り出し方 パターン2 :On/Offだけで、1・2・4・8・16・32・・・・・とわけている場合の、2・4・8・16の部分の取り出し/判定方法 ビットでの操作はシンプルだったので理解できたのですが、 数値としての場合、どう計算すれば任意の場所を取り出せるのでしょうか? 初歩的な事かもしれませんが、検索しても計算方法を見つけきれませんでした; どなたか教えて頂けると幸いです。 っ_ _)っ
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
パターン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; } }
その他の回答 (2)
- wolf03
- ベストアンサー率22% (241/1086)
100の位を取り出すなら1000で割った余りを100で割れば取れますが。
お礼
! そ、その通りですね; ありがとうございますー! orz
- bkbkb
- ベストアンサー率33% (97/289)
パターン1 単純に10や100、1000で割ったらダメですかね? 3204なら1000で割れば3になりますよ。 パターン2 ビット見るのじゃダメですか? 数字でやるのは結構骨というか面倒ですね。
お礼
上は、間の数が直接割ると数字1つになってくれなくて困っていました; 下はこう、なんというかわからないもどかしさが募っていて; ご助言、ありがとうございました~
お礼
下のコードの方はまだよく理解できませんでした。すみません; しかし、&単体で直接数値のビット判定(?)が出来るのですね。 初めて知りました。 かなりためになりました。ありがとうございますっ