16ビットの2進数nを16進数の各桁に分けて,下位の桁から順にスタックに格納するために,次の手順を4回繰り返す。
a,bに入る適切な語句の組合せはどれか。
ここで,XXXX_16は16進数XXXXを表す。
〔手順〕
(1) a をxに代入する。
(2) xをスタックにプッシュする。
(3) nを b 論理シフトする。
正答2
解説
正解は2です。
16ビットの数nを16進数の1桁(4ビット)ずつ取り出し、下位の桁から順にスタックへ積む手順を問う問題です。
最下位の4ビットだけを取り出すにはマスク演算(AND)を使います。
次の桁を最下位に移動させるには、nを右へ4ビット論理シフトします。
【選択肢別解説】
1:× aのn AND 000F_16は最下位4ビットを取り出せるので正しいです。
しかし左へシフトすると、次に取り出すべき上位の桁が最下位に来ないため誤りです。
2:○ 000F_16は下位4ビットだけが1のマスクなので、n AND 000F_16で最下位の16進1桁が得られます。
右へ4ビット論理シフトすると次の桁が最下位に移り、4回繰り返せば下位から順に全桁を格納できます。
3:× FFF0_16とのANDでは最下位4ビットが0になり、取り出したい桁が消えてしまいます。
正しくは000F_16とANDをとります。
4:× シフト方向は正しいですが、FFF0_16のマスクでは最下位の桁ではなく上位12ビットが残るため誤りです。
【ポイント】
特定のビットを取り出すときは、取り出す位置を1にしたマスクとANDをとります。
下位から順に処理するときは右シフト、上位から順に処理するときは左シフトと覚えましょう。