問題
問85
関数 binaryToInteger は、1桁以上の符号なし2進数を文字列で表した値を引数 binaryStr で受け取り、その値を整数に変換した結果を返り値とする。例えば、引数として “100” を受け取ると、4 を返す。プログラム中の a, b に入れる字句の適切な組合せはどれか。


[出典:ITパスポート試験 令和6年度 問85]
スポンサーリンク
正解
正解は「エ」です。
解説
この問題では、2進数を10進数に変換するアルゴリズムを考えます。2進数は右端(下位桁)から順に、各桁の値に2の累乗を掛けて合計することで10進数に変換されます。
したがって、変換の基本的な手順としては、
- 文字列の右端(下位桁)から処理を開始する。
- 各桁の値を整数に変換し、2の累乗を掛ける。
- すべての桁を合計して最終的な整数値を求める。
このアルゴリズムをプログラムに当てはめて考えると、変数 exponent
にはその桁の重み(2の指数)が格納され、integerNum
には計算結果が蓄積されます。
2進数を10進数に変換する際は、各桁の値に2の累乗を掛けたものを合計する必要があります。最下位の桁(右端)から処理を行う場合、i 番目の桁の重みは \(2^{(i-1)}\) になります。
そのため、a には 2の(i-1)乗 が入ります。 また、変換の際には、現在の整数値に新たな桁の値を加算するため、b には integerNum + digitNum × exponent が適切です。これにより、正しい10進数の計算が行えます。
ア((2のi乗) – 1, integerNum × digitNum × exponent):
指数の計算が正しくなく、10進数変換が正しく行えません。
イ((2のi乗) – 1, integerNum + digitNum × exponent):
指数の計算方法が誤っており、2のべき乗の計算が不適切です。
ウ(2の(i-1)乗, integerNum × digitNum × exponent):
加算ではなく乗算を行っているため、累積計算が正しくできません。
難易度
普通
2進数の基礎知識とプログラムの構造を理解しているかが問われる問題です。
スポンサーリンク
用語補足
2進数:
0と1の2つの値のみを使用する数値表現方式で、コンピュータの内部で広く使用されています。
指数表記:
ある数値を底数の累乗として表現する方法で、コンピュータ科学では2の累乗がよく使用されます。
対策
- 2進数の基礎と、その変換手順を理解し、プログラムの流れを追う練習をすることが重要です。