問題
テクノロジ系
問85 関数 binaryToInteger は,1桁以上の符号なし2進数を文字列で表した値を引数 binaryStr で受け取り,その値を整数に変換した結果を戻り値とする。例えば,引数として"100"を受け取ると,4を返す。プログラム中のa,bに入れる字句の適切な組合せはどれか。 〔プログラム〕
選択肢
- ア
- イ
- ウ
- エ
解説
正解:エ
概要
この問題は、2進数の文字列を10進の整数に変換する処理で、各桁の重み(2のべき乗)を使って合計する手順を問う問題です。
正解の理由
末尾からi番目の桁は、下位ビットから数えて0,1,2…番目なので重みは2^(i−1)になります。各桁の値digitNum(0か1)に重みを掛けた値を累積加算していけば整数に変換できるため、aは「2の(i−1)乗」、bは「integerNum + digitNum×exponent」となり正解はエです。
各選択肢の解説
ア(×): aが(2のi乗)−1となっており、桁の重みの定義と一致しません。さらにbが掛け算のみで加算による累積にならず、変換結果を正しく合計できないため誤りです。
イ(×): bは加算で形は近いですが、aが(2のi乗)−1で桁の重みが誤りです。末尾1桁目の重みが1にならないため誤りです。
ウ(×): aは正しく2の(i−1)乗ですが、bが掛け算のみで累積加算になりません。各桁の寄与を足し合わせられないため誤りです。
エ(〇): aは末尾からi番目の重み2の(i−1)乗で正しいです。bはintegerNumにdigitNum×exponentを加算して累積する形で、2進数を10進数に正しく変換できるため正しいです。
ポイント
2進数の変換は「各桁の値×2の重み」を足し合わせます。末尾から数えると重みは2^(i−1)となり、累積は加算で行う点を押さえます。