令和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
- アa:(2 の i 乗) - 1,b:integerNum × digitNum × exponent
- イa:(2 の i 乗) - 1,b:integerNum + digitNum × exponent
- ウa:2 の (i - 1) 乗,b:integerNum × digitNum × exponent
- エa:2 の (i - 1) 乗,b:integerNum + digitNum × exponent
正解:エ
解説
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 が得られ,適切です。