令和3年度秋期 応用情報技術者試験 午前 問23
マイコンの汎用入出力ポートに接続されたLED1を,LED2の状態を変化させずに点灯したい。汎用入出力ポートに書き込む値として,適切なものはどれか。ここで,使用されている汎用入出力ポートのビットは全て出力モードに設定されていて,出力値の読出しが可能で,この操作の間に汎用入出力ポートに対する他の操作は行われないものとする。

- ア 汎用入出力ポートから読み出した値と16進数の08との論理積
- イ 汎用入出力ポートから読み出した値と16進数の08との論理和
- ウ 汎用入出力ポートから読み出した値と16進数の48との論理積
- エ 汎用入出力ポートから読み出した値と16進数の48との論理和
解答・解説を見る
正解:イ
AI解説
特定のビット(LED1に対応するビット)だけを1にし、他のビット(LED2など)の状態を変えたくない場合は、現在の出力値を読み出したうえで、目的のビットだけが1になっているマスク値との論理和(OR)を取ればよい。ORは対象ビットを1に確定させる一方、他のビットは元の値のまま保持されるからである。 ア: 論理積(AND)でマスクを取ると、マスクで0になっているビットは強制的に0にされてしまうため、LED2の状態を変えずにLED1だけ点灯させる目的には使えない。 イ: 読み出した値と、LED1に対応するビットのみが1のマスク(16進数08)との論理和を取れば、LED1のビットだけを1にしつつ他のビット(LED2など)の値は変化しないため、これが正解である。 ウ: 16進数48のマスクは複数ビット(LED1以外のビットも含む)を対象にしており、論理積を取ると他のビットも0にされてしまうため意図した動作にならない。 エ: 16進数48のマスクとの論理和は、LED1以外の余分なビットまで1にしてしまう可能性があり、LED2の状態を変えずにLED1だけを点灯させるという条件に合わない。 💡 特定ビットだけを1にしたいときはOR、特定ビットだけを0にしたいときはAND(反転マスクとの論理積)を使う、という使い分けを覚えておくと役立つ。
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。