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

9 月 16th, 2007 in PHP, Programming users

フラグがいっぱいあるようなプログラムで**_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

Recent Posts

よく考えたらこれでいいじゃん http://bit.ly/bsxqE0 MapperとReducer別々にしないとReflection走るな RT @making: multimethodでたくさん書くのが面倒だからこんなマクロ作った http://bit.ly/bsxqE0
* 10年03月11日03時09分

@junkawamoto うお、おれ明日源泉徴収票届く予定w
* 10年03月11日01時55分

@ryushi スプライシングクオートは楽して大量にS式を自動生成したいときに結構使います。よく入力をmapでごにょごにょ加工して~@したり。 単純な例だとこんなことができます http://gist.github.com/328042
* 10年03月11日01時48分

» Twitter

Search

ドミノ・ピザ 5%OFF!

デル株式会社

 iTunes Store(Japan)

 iTunes Store(Japan)

Sony Style(ソニースタイル)

ツートップインターネットショップ(twotop.co.jp)

Recommend

アルゴリズムC++
アルゴリズムC++
¥ 7,980(新品) /¥ 5,100(中古)
データ構造・アルゴリズムの基礎に関して
一通り網羅されている.
一冊机の上に置いておきたい.
C++で書かれているのも珍しい
(古いC++だけど..)

view all

Categories

Tags