ビット演算と管理方法
ビット演算とは、あるビットパターンを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回同じものを掛けると元に戻るのでちょっとした暗号なんかにも使えたりします。
(スコアデータとか暗号化したいときとか)