工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

【基本情報処理技術者試験】最新問題のテクノロジ系をまったり解く 問1~問2【令和元年度秋試験】

R01基本情報技術者試験 秋季試験に挑戦

キタミ式イラストIT塾 基本情報技術者 平成31/01年 (情報処理技術者試験)

令和元年度 基本情報技術者試験 午前問題

令和元年度 基本情報技術者試験 午前問題 問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進数の変換やりましたね。
ko-gaku-jiji.hatenablog.jp

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

8ビットの値の全ビットを反転する操作はどれか。

16進表記00のビット列と排他的論理和を取る
16進表記00のビット列と論理和を取る
16進表記FFのビット列と排他的論理和を取る
16進表記FFのビット列と論理和を取る
解説

論理演算の問題です。
論理和と、排他的論理和が出てきています。これらを知らないとどうしようもないですよね。
逆に知ってれば、考えるまでもない問題なのですが、全員がそうとも限らないのでまじめに考えてみます。
それぞれの、1ビットずつでの演算は以下のようになります。


\begin{array}{l|l|l|l} 
演算 & X & Y & 出力 \\ \hline
論理和 & 0 & 0 & 0 \\ 
 & 0 & 1 & 1 \\ 
 & 1 & 0 & 1 \\ 
 & 1 & 1 & 1 \\ \hline
排他的論理和 & 0 & 0 & 0 \\
 & 0 & 1 & 1 \\
 & 1 & 0 & 1 \\
 & 1 & 1 & 0 \\
\end{array}

サンプルに、16進表記のA4(10100100(2)=164(10))を使って、実際に計算してみます。

16進表記00のビット列と排他的論理和を取る


\begin{array}{r|l|l|l} 
A4&1&0&1&0&0&1&0&0 \\
00&0&0&0&0&0&0&0&0 \\ \hline
排他的論理和 & 1&0&1&0&0&1&0&0
\end{array}

16進表記00のビット列と論理和を取る


\begin{array}{r|l|l|l} 
      A4&1&0&1&0&0&1&0&0 \\
      00&0&0&0&0&0&0&0&0 \\ \hline
   論理和 & 1&0&1&0&0&1&0&0
\end{array}

16進表記FFのビット列と排他的論理和を取る


\begin{array}{r|l|l|l} 
                   A4&1&0&1&0&0&1&0&0 \\
                   FF&1&1&1&1&1&1&1&1 \\ \hline
排他的論理和 &0&1&0&1&1&0&1&0
\end{array}

16進表記FFのビット列と論理和を取る


\begin{array}{r|l|l|l} 
     A4&1&0&1&0&0&1&0&0 \\
     FF&1&1&1&1&1&1&1&1 \\ \hline
   論理和  &1&1&1&1&1&1&1&1
\end{array}

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