次の流れ図は,10進整数j(0<j<100)を8桁の2進数に変換する処理を表している。
2進数は下位桁から順に,配列の要素NISHIN(1)からNISHIN(8)に格納される。
流れ図のa及びbに入れる処理はどれか。
ここで,j div 2はjを2で割った商の整数部分を,j mod 2はjを2で割った余りを表す。
正答4
解説
正解は4です。
10進数を2進数に直すには、2で割った余りを下位桁から順に取り出し、商を次の割られる数にする操作を繰り返します。
流れ図では、kを1から8まで1ずつ増やしながら、aとbを8回実行します。
【選択肢別解説】
1:× 先にjを2で割ってしまうので、最下位のビットが失われます。
例えばj=5では、jが2になってからNISHIN(1)に0が入り、正しい値1が入りません。
2:× j mod 2を代入するとjは0か1になってしまいます。
その後のj div 2は常に0なので、2桁目以降が正しく求まりません。
3:× NISHIN(k)に入るのは商であり、ビット値ではありません。
さらにjが余りの0か1に置き換わるので、変換は続けられません。
4:○ まずj mod 2で現在の最下位ビットをNISHIN(k)に格納します。
次にj div 2でjを右に1ビットずらした値に更新し、次の桁の準備をします。
【計算】
j=5を例に、選択肢4の処理をたどります。
k=1のとき、NISHIN(1)=5 mod 2=1となり、jは5 div 2=2になります。
k=2のとき、NISHIN(2)=2 mod 2=0となり、jは1になります。
k=3のとき、NISHIN(3)=1 mod 2=1となり、jは0になります。
k=4〜8では、jが0のままなので0が格納されます。
NISHIN(8)からNISHIN(1)へ並べると00000101となり、5を正しく表しています。
【ポイント】
基数変換の流れ図は「余りを格納してから商で更新する」という順序が要です。
順序が逆だと最下位桁が抜け落ちることを覚えておきましょう。