過去問ドリル

令和6年度 ITパスポート試験 問85

テクノロジ/アルゴリズム

関数 binaryToInteger は,1桁以上の符号なし2進数を文字列で表した値を引数 binaryStr で受け取り,その値を整数に変換した結果を戻り値とする。例えば,引数として“100”を受け取ると,4を返す。プログラム中の a,b に入れる字句の適切な組合せはどれか。 〔プログラム〕 ○整数型: binaryToInteger(文字列型: binaryStr)  整数型: integerNum, digitNum, exponent, i  integerNum ← 0  for (i を 1 から binaryStr の文字数 まで 1 ずつ増やす)   digitNum ← binaryStr の末尾から i 番目の文字を整数型に変換した値           // 例: 文字“1”であれば整数値1に変換   exponent ← [ a ]   integerNum ← [ b ]  endfor  return integerNum (注:本サイトでは原問題の選択肢の表を文字表記に変換しています)

出典:令和6年度 ITパスポート試験 問85

正解:エ

解説

2進数は,末尾(1の位)から順に 2の0乗,2の1乗,2の2乗…の重みをもちます。末尾から i 番目の桁の重みは 2 の (i-1) 乗なので a がこれになり,各桁の「値×重み」を足し合わせていくので b は integerNum + digitNum × exponent です。“100” なら 0×1+0×2+1×4=4 となり,例と一致します。

選択肢ごとの解説

  • ア誤り。a の重みが (2 の i 乗)-1 だと 1,3,7…となり誤りです。また b が掛け算では,初期値 0 を掛け続けて常に 0 になります。
  • イ誤り。b は足し算で正しいのですが,a の重みが (2 の i 乗)-1 だと 1,3,7…となり,“100” で 7 になるなど正しく変換できません。
  • ウ誤り。a は正しいのですが,b が掛け算だと integerNum の初期値 0 を掛け続けるため,常に 0 になってしまいます。
  • エ正しい。a の重みは 2 の (i-1) 乗,b は integerNum + digitNum × exponent で,“100” から 4 が得られ,適切です。
ITパスポートの過去問を演習モードで解く