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