マイコンで使うシフト演算

http://elec-studio.eco.coocan.jp/tool_soft02.html

例えば次の例。

 TCCR1B &= ~(1 << CS12);

これはCS12のみをゼロにする(フィルターをかける)コード。

CS12はビット番号を取得するグローバル変数
(0 or 1の値と思っていたら違った)

CS12は2番なので、1< 0b00000100 である。

したがって、
TCCR1B &= ~(1 << CS12);
=> TCCR1B =TCCR1B & ~ (1 << CS12);
=> TCCR1B =TCCR1B & ~ (0b00000100);
=> TCCR1B =TCCR1B & 0b11111011;

3番のビットのみフィルターされて0となる。