マスク計算
真偽だけのフラグを良く使うことがありますが、さらに種類を設けて1つの値で表現する時などに使います。
例えば、ログ出力用に値を設けて、更に、デバック用・警告用・エラー用・通知用など、場合によって指定したものだけ出したい時に、1つの値で表現できたら便利でしょう。別々にフラグを作るのも大変だし指定するのも至難の業です。
例:値debugに、intの各ビットをフラグとして利用し、各値を1つの値で指定する。
1bit目:デバック用
2bit目:警告用
3bit目:エラー用
4bit目:通知用
指定は各ビットのフラグを設定後の値を指定(分かりやすいので10進で指定しています)
#include <stdio.h> void testlog(unsigned int flg) { printf("flg(%d) =>",flg); if ( flg & 0x01 ) { printf("DEBUG,"); } if ( flg & 0x02 ) { printf("WARN,"); } if ( flg & 0x04 ) { printf("SYSTEM,"); } if ( flg & 0x08 ) { printf("INFO,"); } printf("\n"); } int main() { unsigned int debug = 0; for(debug=0; debug<16; debug++) { testlog(debug); } }
$ gcc main.c $ ./a.out flg(0) => flg(1) =>DEBUG, flg(2) =>WARN, flg(3) =>DEBUG,WARN, flg(4) =>SYSTEM, flg(5) =>DEBUG,SYSTEM, flg(6) =>WARN,SYSTEM, flg(7) =>DEBUG,WARN,SYSTEM, flg(8) =>INFO, flg(9) =>DEBUG,INFO, flg(10) =>WARN,INFO, flg(11) =>DEBUG,WARN,INFO, flg(12) =>SYSTEM,INFO, flg(13) =>DEBUG,SYSTEM,INFO, flg(14) =>WARN,SYSTEM,INFO, flg(15) =>DEBUG,WARN,SYSTEM,INFO,