問題
関数 convDecimal は、「0」と「1」だけから成る 1 文字以上の文字列を符号なしの 2 進数と解釈したときの整数値を返す。例えば「10010」を与えると 18 が返る。関数 int は、引数の文字が「0」なら 0 を、「1」なら 1 を返す。図のプログラム中の空欄に入れる正しい答えを、解答群の中から選べ。

選択肢
- 1result + int(binary の (length - i + 1)文字目の文字)
- 2result + int(binary の i文字目の文字)
- 3result × 2 + int(binary の (length - i + 1)文字目の文字)
- 4result × 2 + int(binary の i文字目の文字)
正解
4. result × 2 + int(binary の i文字目の文字)
詳しい解説を見る解説を閉じる
解説
2 進数を先頭(最上位ビット)から 1 文字ずつ読み、それまでの結果を 2 倍して新しいビットを足していく方式(ホーナー法)で 10 進数に変換できる。for は i を 1 から length まで増やすので、i 文字目は左端=上位ビットから順に処理される。1 桁進むごとに既存の値の重みが 2 倍になるため、result × 2 +(新しいビット)を繰り返せばよい。「10010」では、0→1→2→4→9→18 と更新され 18 が得られる。エ(result × 2 + int(binary の i文字目))が正しい。ウは末尾から読む式で結果が反転し、ア・イは 2 倍を行わないため桁の重みを表現できない。よってエが正解。(出典: 令和6年度 基本情報技術者試験 科目B 問2)
一問一答
科目A 180問+科目B 60問