ビットマスクでフラグ管理

9 月 16th, 2007 in PHP, Programming

フラグがいっぱいあるようなプログラムで**_flagみたいなのをいっぱいつくってるようなのがよくみるけど,
ビットマスクを使うとすっきりまとめられる.
使われてるところでは使われてるが,一応PHPでの実装例をメモ.PHPじゃなくても基本同じはず

/* フラグA~E */
define('A',1);
define('B',2);
define('C',4);
define('D',8);
define('E',16);
 
$flag = 0;
$flag |= A | B | C | E; // A, B, C, Eのフラグを立てる
 
var_dump($flag);
var_dump(($flag & A) != 0); // Aフラグが立っているかチェック
var_dump(($flag & B) != 0);
var_dump(($flag & C) != 0);
var_dump(($flag & D) != 0);
var_dump(($flag & E) != 0);
 
$flag ^= A; // Aフラグを下げる
var_dump($flag);
var_dump(($flag & A) != 0);
var_dump(($flag & B) != 0);
var_dump(($flag & C) != 0);
var_dump(($flag & D) != 0);
var_dump(($flag & E) != 0);

実行結果は

int(23)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
int(22)
bool(false)
bool(true)
bool(true)
bool(false)
bool(true)

Leave a Reply

Search

Blog

Twitter

Wassr

Recommend


とりあえず買っとく?

Ads

ドミノ・ピザ 5%OFF!

 iTunes Store(Japan)

Categories

Tags

Counter

total : 00059975
today : 00000036