基本情報技術者試験の科目Bの公開問題を題材に,2進数を10進数に変換する処理について学習します。この問題では,2進数を左から順番に読み取り,計算によって10進数に変換する方法を確認します。
令和6年度 基本情報技術者試験 公開問題 科目B 問2
問 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。
関数 convDecimal は,引数として与えられた,“0” と “1” だけから成る,1文字以上の文字列を,符号なしの2進数と解釈したときの整数値を返す。例えば,引数として “10010” を与えると18が返る。
関数 convDecimal が利用する関数 int は,引数で与えられた文字が “0” なら整数値0を返し,“1” なら整数値1を返す。
〔プログラム〕
○整数型: convDecimal(文字列型: binary)
整数型: i,length,result ← 0
length ← binaryの文字数
for (i を 1 から length まで 1 ずつ増やす)
result ←
endfor
return result
解答群
ア result + int(binary の (length - i + 1)文字目の文字)
イ result + int(binary の i文字目の文字)
ウ result × 2 + int(binary の (length - i + 1)文字目の文字)
エ result × 2 + int(binary の i文字目の文字)
【解答】エ
【解説】
関数 convDecimal は,引数として与えられた2進数を表す文字列を,10進数の整数値に変換する関数である。左から1文字ずつ読み取り,現在の値を2倍して,読み取ったビット(0または1)を加えることで変換を行う。2進数では,桁が1つ左に進むと位の重みが2倍になる。そのため,左から順番に処理するときは,これまでの値を2倍してから,次のビットの値(0または1)を加える。
例えば 10010 は,次のように計算される。
0 ⇒ 0×2+1=1 ⇒ 1×2+0=2 ⇒ 2×2+0=4 ⇒ 4×2+1=9 ⇒ 9×2+0=18
したがって,最終的に18が返される。
この問題のポイント
この問題から学べることは,
- 2進数を10進数に変換する方法
- 2進数を左から順番に処理する方法
- 現在の値を2倍して,次のビットを加える計算
- ループ処理によって,文字列の各文字を順番に処理する方法
です。特に,2進数を左から順番に処理するときに,「現在の値を2倍して,次のビットの値を加える」という計算方法を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


