ビット演算
ビット演算使いどころは, フラグ管理 ,何か真偽値が複数あるときまとめる何使える
table:ビット演算子
& 論理積
| 論理和
^ 排他的論理和
~ 反転
例: 論理積
7 & 2 (10進数) -> 111 & 010 (2進数) -> 010 (2進数) -> 2 (10進数)
例: 論理和
4 | 2 (10進数) -> 100 | 010 (2進数) -> 110 (2進数) -> 6 (10進数)
例: 具体例
フラグ(A, B, C, D)があった場合
以下2進数で、Aを0001 , Bを0010,Cを0100 ,Dを1000 とする
(A,B,C,D) が(off,on,off,on)だった場合
var state = 0 * 1 | 1 * 2 | 0 * 4 | 1 * 8
のように表せる。(stateは10)
仮にBのフラグが立っているか調べたかった場合
state & 2
結果が0でなければ、フラグON 。今回の結果は2でフラグがONだということがわかる。
ビットシフト
table:shift
<< 右シフト
> 左シフト
2進数で見て右or左に値をシフトする
<<
10 << 2 => 1010 を 左に2移動 => 101000 => 40
↑は掛ける4(2の2乗)と同じ
>>
20 >> 1 => 10100 を右に1移動 => 1010 => 10
↑は割る2(2の1乗)と同じ