
No.1ベストアンサー
- 回答日時:
ビット演算を使用したものです.
二進数で考えたときのビット位置で判定します.
以下に例を示します.
#define BitValue(n) (1<<(n))
#define FLAG0 BitValue(0) // == 00000001
#define FLAG1 BitValue(1) // == 00000010
#define FLAG2 BitValue(2) // == 00000100
/* ビット位置を利用した引数による関数 */
void func(unsigned char flag)
{
// 以下のような処理をビットマスクと言います.
if ( flag & FLAG0 ); // フラグ0がセットされた時.
if ( flag & FLAG1 ); // フラグ1がセットされた時.
if ( flag & FLAG2 ); // フラグ2がセットされた時.
}
int main (void)
{
func(FLAG0 | FLAG2); // == 00000100 | 00000001 == 00000101
return 0;
}
このような感じでFLAGの定数をどんどん2^n乗していけばどんどんフラグは増やせます.
但し,sizeof(型)*8 以上の定数を宣言すると,比較できないので注意してください.
No.2
- 回答日時:
「ビット演算する」との回答ばかりですが、MessageBoxのフラグについては、もう少し複雑です。
intが32ビットの環境では、intを4ビットづつに切れば「4×8」で、8個のパラメータを1つの引数で受け渡し出来ます。
例えばMessageBoxは
0~3ビットは、ボタンの数と種類
4~7ビットは、アイコンの種類
になっています。
#define MB_OKCANCEL 0x00000001
#define MB_ICONEXCLAMATION 0x00000030
であれば、MB_OKCANCEL|MB_ICONEXCLAMATIONは0x00000031になります。
この引数をcFlagに受け取った関数は
if ((cFlag & 0x0000000f) == MB_OKCANCEL)
とか
if ((cFlag & 0x000000f0) == MB_ICONEXCLAMATION)
とかのように判定します。
この他、int1つに複数のパラメータを重ねて使用する例として
0~15ビットは、キーのリピートカウント
16~23ビットは、キーのスキャンコード
24ビットは、拡張キーの有無
25~28ビットは、未使用
29ビットは、context codeのフラグ
30ビットは、previous key stateのフラグ
31ビットは、transition stateのフラグ
などという使い方をしている物もあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
intとlongは同じ?
-
条件が多い場合
-
再帰処理をループ処理に変換
-
再起呼び出しの回数をカウント...
-
rand()の乱数は何故良くないの?
-
迷路を脱出する経路探索プログ...
-
プログラミングに関して
-
最早開始時間と最遅完了時刻を...
-
20'(角度)の計算がわかりま...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
数字以外が入力されたらエラー...
-
値差の%計算方法について
-
「Aに対するBの割合」と「Aに対...
-
#defineが使用するメモリ領域に...
-
cout関数を使っているのですが...
-
2÷3などの余りについて
-
構造体の勉強中です 合計点の高...
-
main.c:7:43: warning: implici...
-
C言語 エラーの原因がわからな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で簡単なパックマンゲーム...
-
2の補数を計算するプログラム
-
c言語プログラミングについて f...
-
再起呼び出しの回数をカウント...
-
intとlongは同じ?
-
openCVの画像処理について
-
C言語
-
【C#】SQL文の中に変数を埋め込...
-
C言語プログラミング 漸化式に...
-
カードシャッフルのブログラム...
-
C++ Debug Errorについて教えて
-
デバッグビルドとリリースビル...
-
迷路を脱出する経路探索プログ...
-
C++デバックエラーについて詳し...
-
C++ bmp 透過処理
-
複数の共有メモリの作成
-
C言語で%を使わない余りの出し方
-
C言語
-
2次関数プログラムを描写する...
-
16bitで乱数を生成する方法
おすすめ情報