it-kakomon › ITパスポート › 令和6年度 › 問85

令和6年度 ITパスポート 問85(テクノロジ)

出典:令和6年度 ITパスポート試験 公開問題 問85(独立行政法人情報処理推進機構(IPA))

関数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
選択肢ab
ア(2のi乗)-1integerNum×digitNum×exponent
イ(2のi乗)-1integerNum+digitNum×exponent
ウ2の(i-1)乗integerNum×digitNum×exponent
エ2の(i-1)乗integerNum+digitNum×exponent
正解と解説を見る

正解:エ

【2進数の重み】

2進数では、各桁が2の累乗の重みを持ちます。末尾(右端)から数えて、1番目の桁は1(2の0乗)、2番目の桁は2(2の1乗)、3番目の桁は4(2の2乗)です。つまり、末尾からi番目の桁の重みは、2の(i - 1)乗です。

整数の値は、各桁の数字(0か1)に重みを掛けて、全て足し合わせたものです。例えば"100"は、1 × 4 + 0 × 2 + 0 × 1 = 4 です。

【プログラムの動き】

iを1から文字数まで増やしながら、末尾からi番目の数字をdigitNumに取り出します。

a:その桁の重みをexponentに入れるので、2の(i - 1)乗です。

b:その桁の値(digitNum × exponent)を、これまでの合計integerNumに足していくので、integerNum + digitNum × exponent です。

【"100"で確かめる】

・i = 1:末尾から1番目は0、重みは1、合計は 0 + 0 × 1 = 0

・i = 2:末尾から2番目は0、重みは2、合計は 0 + 0 × 2 = 0

・i = 3:末尾から3番目は1、重みは4、合計は 0 + 1 × 4 = 4

戻り値は4で、例と一致します。

【選択肢の検討】

ア・イ:aを(2のi乗)- 1 とすると、重みが1、3、7、…となり、2進数の桁の重みになりません。

ウ:bを掛け算にすると、integerNumは最初が0なので、ずっと0のままです。

よって、正解は選択肢エです。

まず令和8年度の100問を通しで解いてみる(無料)