2013年2月12日火曜日

組込みC言語ービット演算


ビット演算の基礎知識

多分、一般的なプログラミングと決定的に違うのがビット演算。
  • ~(ビット反転)
  • 正確には整数の補数を取る
  • &(積)
  • |(和)
  • ^(排他論理和)
  • <<, >>(左シフト,右シフト)
  • いわゆる、繰り上げ、繰り下げ。ビット演算なので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);


ビビッドレッド・オペレーションとは一切関係ありません。

1 件のコメント:

  1. > A^Aとやるとゼロになるため、初期化などによく使われる。

    大昔の8bitマイコンのZ80ではレジスタにゼロを代入するより、そのレジスタ同士でxor命令を実行するほうが、コードサイズが短くて速かったのさ。

    返信削除