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で質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(Microsoft Office) SUMIFとCOUNTIFの違いについて 4 2022/09/29 14:13
- JavaScript useStateの分割代入について 1 2022/05/06 10:02
- Excel(エクセル) スプレッドシート 関数で集計したい 2 2023/01/08 17:09
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- その他(プログラミング・Web制作) Pythonでの不均一なサイコロをつくるプログラミングがわかりません 4 2022/06/07 13:10
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
intとlongは同じ?
-
2次関数プログラムを描写する...
-
C++ bmp 透過処理
-
再起呼び出しの回数をカウント...
-
C言語 格子点が多角形の中にあ...
-
OpenGLの惑星プログラム
-
| (or) を使った関数の引数の作...
-
分数の足し算をさせるプログラ...
-
乱数生成について
-
C++ Debug Errorについて教えて
-
ヌメロンのプログラム
-
条件が多い場合
-
素数を求めるプログラム
-
c言語プログラミングについて f...
-
C言語で簡単なパックマンゲーム...
-
C言語のプログラム
-
argvのNULLチェック
-
当たり判定の処理がわかりません。
-
カメラを用いて動画から画像を...
-
画像の拡大・縮小
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報