跳到正文

令和6年度 ITパスポート試験 問85

这道题的解析和你的作答记录。

問85
頻出度★★☆

関数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

出典 令和6年度 ITパスポート試験 問85
解説

問 85

  • 错误ア

    a 的「2 的 i 次方 − 1」是错误的。从末尾起第 i 个数位的权重为 2 的 (i − 1) 次方,而非 2 的 i 次方 − 1(例:i=1 时权重为 1,此式得 2−1=1 恰好吻合,但 i=2 时本应为 2 却变成 3)。此外 b 的「integerNum × digitNum × exponent」也是错误的,由于把各位相乘,而初始值为 0,结果将始终为 0,无法完成转换。a、b 都不合适。

  • 错误イ

    b 的「integerNum + digitNum × exponent」是正确的累积加法,但 a 的「2 的 i 次方 − 1」是错误的。从末尾起第 i 个数位的权重为 2 的 (i − 1) 次方(i=1 为 1,i=2 为 2,i=3 为 4),而 2 的 i 次方 − 1(i=2 为 3,i=3 为 7)与数位权重不符,即使代入“100”也得不到 4。

  • 错误ウ

    a 的「2 的 (i − 1) 次方」是正确的数位权重,但 b 的「integerNum × digitNum × exponent」是错误的。由于 integerNum 的初始值为 0,用乘法更新时每次都会乘以 0,导致返回值始终为 0。正确的做法必须是将每一位的贡献累加进去的加法。

  • エ

    正解 在二进制中,最右端(从末尾起第 1 个)数位的权重为 2 的 0 次方,其左边为 2 的 1 次方……依次递增,因此从末尾起第 i 个数位的权重为「2 的 (i − 1) 次方」。这就是填入 a 的内容(exponent ← 2 的 (i − 1) 次方)。每一位都将该位的值 digitNum 乘以权重 exponent 后的结果累加到合计中,因此 b 为「integerNum + digitNum × exponent」,通过累积加法求得整体的值。实际代入“100”时,i=1 时权重 1×0=0,i=2 时权重 2×0=0,i=3 时权重 4×1=4,于是 integerNum 为 4。与题目的返回值 4 一致,因此组合エ正确。

ここがポイント
  • 无符号二进制数各数位的权重,在从末尾(最低位)起第 i 个为 2 的 (i − 1) 次方。要掌握最低位从 2 的 0 次方 = 1 开始的位权规律。
  • 通过把每一位的值×权重「累加」到合计中的累积加法模式(integerNum ← integerNum + 项)求得总和。注意对初始值 0 做乘法仍然会保持为 0。
用語
解答問85エ
练这一题

作答记录