組込み・ファームウェア
C言語で、レジスタregのビット3だけを1にし、ほかのビットは変えない書き方として正しいものはどれか。
- Areg |= (1 << 3);
- Breg = (1 << 3);
- Creg &= (1 << 3);
答えと解説を見る
正解:A. reg |= (1 << 3);
「1 << 3」は2進数で00001000で、ビット3だけが1の値(マスク)です。これとレジスタの値をOR(|)でまとめると、ビット3は必ず1になり、ほかのビットは元の値のまま残ります。代入(=)を使うとほかのビットまで0で上書きしてしまい、周辺回路の別の設定を壊します。ビットの番号は最下位を0として数えます。
- A. 正しい。ORでそのビットだけを1にします。
- B. ほかのビットがすべて0になってしまいます。
- C. ANDではビット3以外がすべて0になります。