ビット演算の基礎知識
多分、一般的なプログラミングと決定的に違うのがビット演算。- ~(ビット反転) 正確には整数の補数を取る
- &(積)
- |(和)
- ^(排他論理和)
- <<, >>(左シフト,右シフト) いわゆる、繰り上げ、繰り下げ。ビット演算なので2倍になったり、2分の1になったりする。 なお、signed,unsignedで論理シフトになったり算術シフトと一応名前が変わる。ようするに符号を考慮するかしないかだけ。
ビット演算を使ったテクニック
- ^(排他論理和) A^Aとやるとゼロになるため、初期化などによく使われる。
- 左シフト しばしば、 シフト(1 << n)などと使われる。要するにn番目のビットという事を示す
- マスク 積をとることをしばしば、マスクするという。
- ビットセット reg |= HOGE_BIT 任意のビットを1にする。などとも使われる。
- ビットクリア reg &= ~HOGE_BIT
よく見るようなコード
reg = RegisterRead(BoardPhyAddrGet(ethPortNum));
reg &= ~0x000f;
reg |= 0x0008;
RegisterWrite(reg);
ビビッドレッド・オペレーションとは一切関係ありません。
> A^Aとやるとゼロになるため、初期化などによく使われる。
返信削除大昔の8bitマイコンのZ80ではレジスタにゼロを代入するより、そのレジスタ同士でxor命令を実行するほうが、コードサイズが短くて速かったのさ。