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ビットを取り出すにはマスク演算を使い、次のけたを下位に持ってくるにはシフトを使います。
【選択肢別解説】
1:× aのn AND 000F_16は正しいですが、bの左シフトが誤りです。
左に4ビットシフトすると上位のけたがあふれて失われ、次に取り出すけたが下位に来ません。
2:○ aのn AND 000F_16で、下位4ビットだけを残し、ほかを0にして1けた分を取り出せます。
bでnを右に4ビット論理シフトすると、1つ上のけたが最下位に移ります。
これを4回繰り返せば、下位のけたから順に4けたすべてをプッシュできます。
3:× FFF0_16でANDをとると、取り出したい下位4ビットが逆に0になってしまいます。
さらに左シフトでは次のけたも下位に移りません。
4:× 右シフトは正しいですが、FFF0_16のマスクでは下位4ビットが消えてしまいます。
取り出すべき下位4ビットを残すマスクは000F_16です。
【ポイント】
ビットを取り出すときはANDで残したい位置を1にしたマスクを使います。
16進1けたは4ビットなので、4ビットずつ右シフトしながら処理するのが定石です。