平成25年度 春期 午前 問1
離散数学
論理シフトに関する問題
16 ビットの 2 進数 n を 16 進数の各桁に分けて,下位の桁から順にスタックに格納するために,次の手順を 4 回繰り返す。a,b に入る適切な語句の組合せはどれか。ここで,XXXX₁₆ は 16 進数 XXXX を表す。
〔手順〕 (1) [ a ] を x に代入する。 (2) x をスタックにプッシュする。 (3) n を [ b ] 論理シフトする。
| a | b | |
|---|---|---|
| ア | n AND 000F₁₆ | 左に 4 ビット |
| イ | n AND 000F₁₆ | 右に 4 ビット |
| ウ | n AND FFF0₁₆ | 左に 4 ビット |
| エ | n AND FFF0₁₆ | 右に 4 ビット |
- アn AND 000F₁₆ 左に 4 ビット
- イn AND 000F₁₆ 右に 4 ビット
- ウn AND FFF0₁₆ 左に 4 ビット
- エn AND FFF0₁₆ 右に 4 ビット
答えと解説を見る
✓ これが正解イn AND 000F₁₆ 右に 4 ビット
解説
下位4ビットだけを残し、右へ4ビットずらします。
16進数の1桁は、2進数の4ビットにちょうど対応します。ですから下位の桁を1つ取り出すことは、16ビットのうち下の4ビットだけを残すことと同じ意味になります。ビットごとの論理積は、相手の値で1が立っている位置をそのまま通し、0にしてある位置を消す働きをします。残したい側に1を並べた値を用意する、というのが前半の空欄の考え方です。後半の空欄は、繰返しのたびに別の桁を同じ場所へ運ぶための操作です。すでに取り出した桁を追い出し、上にある桁を下へ降ろす方向を選びます。16進数で1A2Bという値を4回まわすと、B、2、A、1の順に積まれ、下位の桁から順にという条件と一致します。
ほかの選択肢はなぜ違うのか
- アn AND 000F₁₆ 左に 4 ビッ…:取り出す側の値は合っていますが、ずらす向きが逆です。上へ送っても、まだ取り出していない桁は下位へ近づかず、空いた場所に0が入るだけになります。
- ウn AND FFF0₁₆ 左に 4 ビッ…:上位の12ビットに1を並べた値と組み合わせる形なので、ほしい下位の桁のほうが消えてしまいます。ずらす向きも上向きで、次の桁を取り出す位置へ運べません。
- エn AND FFF0₁₆ 右に 4 ビッ…:ずらす向きは合っていますが、組み合わせる相手の下位4ビットが0になっています。これでは取り出したい下位の桁が毎回消えてしまい、上位の12ビットが残ったままの値がスタックに積まれます。
出典:平成25年度 春期 基本情報技術者試験 午前 問1(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)