ビット演算と管理方法

ビット演算とは、あるビットパターンを2進数として扱い演算することです。
演算にはAND OR XOR NOT などがあり、ビットシフトもここに該当することがあります。

AND       OR        XOR       NOT       ビットシフト
010101    010101    010101    010101    0001110
111100    111100    111100              << +2
------    ------    ------    ------    -------
010100    111101    101001    101010    0111000



ANDは2つのビットパターンが、ともに1の時に1になります。
ORは2つのビットパターンの、どちらか一方でも1の時に1になります。
XORは2つのビットパターンのうち、片方だけ1の時に1になります。
NOTはビットパターンの0と1を反転させます。
ビットシフトは指定数だけビットパターンをずらします。(2の累乗を掛ける)

C言語でのサンプル(int a,b,c)
AND  : a = b & c;
OR   : a = b | c;
XOR  : a = b ^ c;
NOT  : a = ~b;
SHIFT: a = b << c;





これから、これがどんな役に立つのか紹介していきます。


例えば、RPGなどでステータス管理なんかで同時に複数のステータス状況が存在する場合などがあります。
(例えば、生存+毒+眠りなど同時に存在する場合)


このような場合、フラグ変数をいくつも用意しなければならないように見えますが
1つの変数にまとめることができます。


4つの状態が存在する場合、4ビットの変数を用意しておき
1ビット目=生死フラグ 2ビット目=毒フラグ 3ビット目=眠りフラグ 4ビット目=ゾンビ
などと設定します。

生+毒+眠り   = 1110
眠り+ゾンビ  = 0011



このようにしてバリエーションを増やしていきます。




ここでのデータ操作においてビット演算が役に立ちます。


生死のフラグを取り出すときは 1000 とANDをして0でなければ生0になれば死として判断できます。
また、毒をセットしたいときには、 (0001<<3)=(0100) とORをすれば毒状態だけをセットできます。






XORは2回同じものを掛けると元に戻るのでちょっとした暗号なんかにも使えたりします。
(スコアデータとか暗号化したいときとか)