ビットマスクでフラグ管理
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)

