性格悪い人が優勝

ビットフラグの方法ではなく
数値フラグの計算というか判定の方法の話なのですが、

C++でファイルから設定を読み込む時、
1つの整数にフラグをまとめ様としているのですが、
パターン1
 :1の位 10の位 100の位 1000の位・・・ とわけて位毎に3~5種程のフラグを持たせている場合の、10・100の位の取り出し方
パターン2
 :On/Offだけで、1・2・4・8・16・32・・・・・とわけている場合の、2・4・8・16の部分の取り出し/判定方法

ビットでの操作はシンプルだったので理解できたのですが、
数値としての場合、どう計算すれば任意の場所を取り出せるのでしょうか?

初歩的な事かもしれませんが、検索しても計算方法を見つけきれませんでした;
どなたか教えて頂けると幸いです。 っ_ _)っ

A 回答 (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;
  }
}
    • good
    • 0
この回答へのお礼

下のコードの方はまだよく理解できませんでした。すみません;

しかし、&単体で直接数値のビット判定(?)が出来るのですね。
初めて知りました。
かなりためになりました。ありがとうございますっ

お礼日時:2009/03/25 17:51

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

    • good
    • 0
この回答へのお礼


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

お礼日時:2009/03/25 17:39

パターン1


単純に10や100、1000で割ったらダメですかね?
3204なら1000で割れば3になりますよ。

パターン2
ビット見るのじゃダメですか?
数字でやるのは結構骨というか面倒ですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/25 17:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!