レジスタ制御用ワンライナー達

変数regにマップされたレジスタを、ビット演算子で制御する。

マスクを用意

msk = 1U << x;

AND (&)

xビットを取ってくる

bit = (reg & msk) >> x;

xビットをクリア

reg &= ~msk;

xビット以外をクリア

reg &= msk;

xビットによる条件分岐 (1bit)

if (reg & msk)    // ビットが立っていれば、、、
    ;
else
    ;

xビットによる条件分岐 (マルチbit)

if ((reg & msk) == msk)    // ビットが立っていれば、、、
    ;
else
    ;

OR (|)

xビットを立てる

reg |= msk;

XOR (^)

xビットをトグル

reg ^= msk;

番外編

下位xビットをとってくる

reg & (msk - 1U)

マクロ内で変数を安全に使う方法

#define HOGE() do { \
    int new_var; \
    ... \
    } while(0);