令和元年度秋期 基本情報技術者試験 午前 問1~問2|過去問解説
令和元年度秋期・基本情報技術者試験の午前問1~問2を解説します。10進整数を2進数へ変換する流れ図と、排他的論理和による8ビット値の反転を、筆算とビット列の計算で確認します。
この記事について
2019年(令和元年度)秋期に実施された基本情報技術者試験 午前の問1~問2を扱う過去問解説です。現在の試験制度や出題形式とは一部異なりますが、コンピュータサイエンスの基礎学習には引き続き活用できます。
出典・引用について
問題文、選択肢および試験問題に含まれる図表は、独立行政法人情報処理推進機構(IPA)が公開している令和元年度秋期試験から引用しています。掲載にあたり、改行、表組み、全角・半角、画像配置などを調整している場合があります。問題の趣旨は変更していません。解説、補足、計算過程および当サイト作成の図は、工学じじいの縁側日記によるものです。
IPA公式・問題冊子(PDF) / IPA公式・解答例(PDF) / 2019年度の過去問題一覧
R01基本情報技術者試験 秋期試験に挑戦
令和元年度 基本情報技術者試験 午前問題
令和元年度 基本情報技術者試験 午前問題 問1
出典:令和元年度 秋期 基本情報技術者試験 午前 問1
次の流れ図は、10進整数j(0<j<100)を8桁の2進数に変換する処理を表している。2進数は下位桁から順に、配列の要素NISHIN(1)からNISHIN(8)に格納される。流れ図のa及びbに入る処理はどれか?ここで、jdiv2はjを2で割った商の整数部分を、jmod2はjを2で割った余りを表す。

図:フローチャート
注意:ループ端の繰り返し指定は、変数名:初期値、増分、終値を示す。
| a | b | |
|---|---|---|
| ア | j ← j div 2 | NISHIN(k) ← j mod 2 |
| イ | j ← j mod 2 | NISHIN(k) ← j div 2 |
| ウ | NISHIN(k) ← j div 2 | j ←j mod 2 |
| エ | NISHIN(k) ← j mod 2 | j ← j div 2 |
解説
ちょうどこの前、変数の型の話をしたときに、2進数と10進数の変換やりましたね。
2で割っていって、余りを下から並べる
2) 20
2) 10 ...0 ←①
2) 5 ...0 ←②
2) 2 ...1
2) 1 ...0
2) 0 ...1
10100が2進数で書いた10進数の20ということでした。
処理の流れを見てみると、
ア、イは、jを更新してから、更新したjを使ってNISHIN(k)を更新、
ウ、エは、NISHIN(k)を更新してから、同じjを使ってjを更新、という流れになります。
先ほどの筆算をかんがえると、
①は、20を2で割った商を書き、隣に20を2で割った余りを書いている
②は、10を2で割った商を書き、隣に10を2で割った余りを書いている
両方同じjで処理するということですので、ウかエが答えってことになります。
んで、実際に、2進数の数値となるのは、余りの方なので、配列に入るのは確実にmod演算の結果ですね。
じゃぁ、エが正解
令和元年度 基本情報技術者試験 午前問題 問2
出典:令和元年度 秋期 基本情報技術者試験 午前 問2
8ビットの値の全ビットを反転する操作はどれか。
| ア | 16進表記00のビット列と排他的論理和を取る |
|---|---|
| イ | 16進表記00のビット列と論理和を取る |
| ウ | 16進表記FFのビット列と排他的論理和を取る |
| エ | 16進表記FFのビット列と論理和を取る |
解説
論理演算の問題です。
論理和と、排他的論理和が出てきています。これらを知らないとどうしようもないですよね。
逆に知ってれば、考えるまでもない問題なのですが、全員がそうとも限らないのでまじめに考えてみます。
それぞれの、1ビットずつでの演算は以下のようになります。
$$\begin{array}{c|c|c|c}\text{演算}&X&Y&\text{出力}\cr\hline\text{論理和}&0&0&0\cr&0&1&1\cr&1&0&1\cr&1&1&1\cr\hline\text{排他的論理和}&0&0&0\cr&0&1&1\cr&1&0&1\cr&1&1&0\end{array}$$
サンプルに、16進表記のA4(10100100(2)=164(10))を使って、実際に計算してみます。
| ア | 16進表記00のビット列と排他的論理和を取る |
|---|
$$\begin{array}{c|cccccccc}\mathrm{A4}&1&0&1&0&0&1&0&0\cr\mathrm{00}&0&0&0&0&0&0&0&0\cr\hline\text{排他的論理和}&1&0&1&0&0&1&0&0\end{array}$$
| イ | 16進表記00のビット列と論理和を取る |
|---|
$$\begin{array}{c|cccccccc}\mathrm{A4}&1&0&1&0&0&1&0&0\cr\mathrm{00}&0&0&0&0&0&0&0&0\cr\hline\text{論理和}&1&0&1&0&0&1&0&0\end{array}$$
| ウ | 16進表記FFのビット列と排他的論理和を取る |
|---|
$$\begin{array}{c|cccccccc}\mathrm{A4}&1&0&1&0&0&1&0&0\cr\mathrm{FF}&1&1&1&1&1&1&1&1\cr\hline\text{排他的論理和}&0&1&0&1&1&0&1&1\end{array}$$
| エ | 16進表記FFのビット列と論理和を取る |
|---|
$$\begin{array}{c|cccccccc}\mathrm{A4}&1&0&1&0&0&1&0&0\cr\mathrm{FF}&1&1&1&1&1&1&1&1\cr\hline\text{論理和}&1&1&1&1&1&1&1&1\end{array}$$
全部見てみるとウだけが、元のすべてのビットが反転されてますね。
演算結果がわかっていれば並べてみるだけの問題です。
シリーズ内の記事
内容の誤りや分かりにくい箇所は、お問い合わせページからお知らせください。