組込み・ファームウェア
入力用のレジスタinのビット5が1かどうかを調べるC言語の条件として正しいものはどれか。
- Aif (in | (1 << 5))
- Bif (in == 5)
- Cif (in & (1 << 5))
答えと解説を見る
正解:C. if (in & (1 << 5))
「in & (1 << 5)」は、ビット5以外をすべて0にした値になるので、ビット5が1なら32(0以外で真)、0なら0(偽)になります。C言語では0以外が真なので、そのままif文の条件に使えます。結果を1か0にしたいときは「(in >> 5) & 1」と書きます。ORでは結果が必ず0以外になり、調べたことになりません。
- A. ORの結果は常に0以外になり、いつも真になります。
- B. 値が5かどうかを比べていて、ビット5とは関係ありません。
- C. 正しい。ビット5以外を0にして残りを見ます。