令和元年度秋期 基本情報技術者試験 午前 問1~問2|過去問解説

令和元年度秋期・基本情報技術者試験の午前問1~問2を解説します。10進整数を2進数へ変換する流れ図と、排他的論理和による8ビット値の反転を、筆算とビット列の計算で確認します。

Share
【基本情報処理技術者試験】最新問題のテクノロジ系をまったり解く 問1~問2【令和元年度秋試験】
この記事について
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で割った余りを表す。

f:id:gomta777:20191030032450p:plain

図:フローチャート

注意:ループ端の繰り返し指定は、変数名:初期値、増分、終値を示す。

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進数の変換やりましたね。

Pythonで基数変換を考える関連記事

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}$$

全部見てみるとウだけが、元のすべてのビットが反転されてますね。
演算結果がわかっていれば並べてみるだけの問題です。


シリーズ内の記事

内容の誤りや分かりにくい箇所は、お問い合わせページからお知らせください。