令和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
| 選択肢 | a | b |
|---|---|---|
| ア | (2のi乗)-1 | integerNum×digitNum×exponent |
| イ | (2のi乗)-1 | integerNum+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のままです。
よって、正解は選択肢エです。