2進数変換プログラム

正解は エ です。 2進数は、右端(末尾から1番目)の桁の重みが $2^0=1$、その左が $2^1=2$、…と左へ行くほど2倍になります。末尾から i 番目の重みは $2^{i-1}$ なので、a は「2の(i−1)乗」です。 各桁の値(0か1)に重みを掛けたものを、integerNum に 足し込んでいけば 10進数の値になります。よって b は「integerNum+digitNum×exponent」です。 i digitNum exponent(a) integerNum(b) 1 1 $2^0=1$ 0+1×1=1 2 0 $2^1=2$ 1+0×2=1 3 1 $2^2=4$ 1+1×4=5 4 1 $2^3=8$ 5+1×8=13 a を「(2のi乗)−1」にすると重みが 1, 3, 7, 15 となり、2進数の重みになりません(ア・イ)。 b を掛け算にすると、integerNum の初期値 0 に掛け続けるため結果がずっと 0 のままです(ア・ウ)。

関数binaryToIntegerは符号なし2進数文字列を整数へ変換する。プログラム中のa,bの適切な組合せはどれか。

 for(i を 1 から binaryStr の文字数 まで 1 ずつ増やす)

  digitNum ← binaryStr の末尾から i 番目の文字を整数型に変換

  exponent ←  a 

  integerNum ←  b 

出典令和6年度 ITパスポート試験 公開問題 問85

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