レジスタ制御用ワンライナー達
変数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);