組込み・ファームウェア
LEDをつないだ出力端子のビットを、実行するたびに点灯と消灯で切り替えたい。C言語の書き方として正しいものはどれか。
- Aport |= (1 << 5);
- Bport ^= (1 << 5);
- Cport &= ~(1 << 5);
答えと解説を見る
正解:B. port ^= (1 << 5);
排他的論理和(XOR、^)は、1とのXORでビットが反転し、0とのXORでは変わりません。そのため「port ^= (1 << 5)」を実行するたびに、ビット5だけが0と1の間で切り替わります。LEDの点滅などによく使います。マイコンによっては、書き込むだけでビットを反転できる専用のレジスタを持つものもあります。
- A. これは常に1にするだけで、切り替わりません。
- B. 正しい。XORで1のビットを反転させます。
- C. これは常に0にするだけで、切り替わりません。