組込み・ファームウェア

C言語で、レジスタregのビット3だけを1にし、ほかのビットは変えない書き方として正しいものはどれか。

  1. Areg |= (1 << 3);
  2. Breg = (1 << 3);
  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になります。
この分野を解く 分野ページへ

組込み・ファームウェアのほかの問題

  1. C言語で、レジスタregのビット3だけを0にし、ほかのビットは変えない書き方として正しいものはどれか。
  2. LEDをつないだ出力端子のビットを、実行するたびに点灯と消灯で切り替えたい。C言語の書き方として正しいものはどれか。
  3. 入力用のレジスタinのビット5が1かどうかを調べるC言語の条件として正しいものはどれか。
  4. 上のコードは、レジスタregの複数ビットの設定欄を書き換えている。何をしているか。
  5. メイン処理でレジスタのビットを「reg |= mask;」(読み出し・変更・書き込み)で操作している最中に、割り込みハンドラが同じレジスタの別のビットを書き換えると起こりうる問題と対策の組み合わせとして正しいものはどれか。