この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

10進数を2進数に変換する基本アルゴリズムの問題です。10進整数 j を2で割った余り(j mod 2)がその時点の最下位ビットになり、商の整数部分(j div 2)が残りの処理対象になります。これを8回繰り返すことで、下位桁から順に2進数の各ビットが得られます。流れ図ではループ変数 k が1から8まで増加し、NISHIN(k) に下位桁から格納していきます。処理 a と b の順序が決定的に重要です。先に NISHIN(k) ← j mod 2 で現在の j の余り(最下位ビット)を配列に格納し、その後に j ← j div 2 で j を2で割って次の桁の処理に進む、という順序でなければなりません。例えば j=6(2進数で110)なら、1回目は 6 mod 2=0 を格納して j=3 に、2回目は 3 mod 2=1 を格納して j=1 に、3回目は 1 mod 2=1 を格納して j=0 になり、下位から 0,1,1 が正しく得られます。したがってエが正解です。

なぜ他の選択肢は違うのか

選択肢 ア
a で先に j ← j div 2 を実行すると、余りを取り出す前に j が2で割られてしまい、元の最下位ビットの情報が失われます。例えば j=6 の場合、先に j=3 となってから 3 mod 2=1 を格納するため、本来格納すべき最下位ビットの 0 が消えて誤った2進数になります。「余りを取り出してから割る」という正しい順序の逆になっている点が誤りです。流れ図の上の箱から順に実行されることを意識してトレースすれば気づけます。
選択肢 イ
a の j ← j mod 2 を実行すると、j 自体が余り(0 か 1)に置き換わってしまい、元の値の情報がすべて失われます。2回目以降のループでは j が 0 か 1 のままになるので、8桁分の変換処理がまったく成立しません。また b の NISHIN(k) ← j div 2 は余りではなく商を格納しており、2進数の桁の定義(2で割った余りがビット値になる)にも合致しません。二重の誤りを含む選択肢です。
選択肢 ウ
NISHIN(k) ← j div 2 は2で割った「商」を配列に格納していますが、2進数の各桁に対応するのは「余り」です。例えば j=6 なら 6 div 2=3 が格納されてしまい、ビット値(0 または 1)ですらない値が配列に入ります。さらに b の j ← j mod 2 で j 自体が余りに置き換わってしまうため、以降のループ処理も破綻します。商と余りの役割を取り違えた選択肢であり、具体値での検算で確実に除外できます。

解くときのポイント

10進→2進変換は「2で割った余りを下位桁から並べる」が鉄則。流れ図問題は具体的な数値(例: j=6)で1周ずつトレースすると確実に判別できる。