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