組込み・ファームウェア
C言語で、レジスタregのビット3だけを0にし、ほかのビットは変えない書き方として正しいものはどれか。
- Areg &= ~(1 << 3);
- Breg |= ~(1 << 3);
- Creg &= (1 << 3);
答えと解説を見る
正解:A. reg &= ~(1 << 3);
「~(1 << 3)」は、ビット3だけが0で、ほかがすべて1の値です。これとAND(&)を取ると、ビット3は必ず0になり、ほかのビットは1とのANDなので元のまま残ります。ビットを立てるOR、下ろすAND NOT、反転させるXOR(^)、調べるANDの4つは、ファームウェアでレジスタを操作するときの基本の形です。
- A. 正しい。ビット3だけが0のマスクとANDを取ります。
- B. ORではビット3以外がすべて1になってしまいます。
- C. これではビット3以外がすべて0になります。