2023年4月から基本情報技術者の試験制度が変更されました。
試験制度は変更されたものの科目B(旧:午後問題)の重要さは変わりません。
出題方式は「多肢選択式」で以前と同じですが、データ構造及びアルゴリズムが8割、情報セキュリティが2割の割合で出題される点が大きく変わっています。
合格基準点は600点以上/1000点満点中、つまり6割以上取れれば合格になります。
サンプル問題では前半16問が「データ構造及びアルゴリズム」の問題。残り4問が「情報セキュリティ」の問題。となっています。
サンプル問題は公式にIPAから出されている貴重な情報です!
早速、問題を見ていきましょう!
問6 (データ構造及びアルゴリズム)
設問
解答
答え:「ア」
解説
前提知識
■論理積(AND)
両方のビットがともに"1"の入力のときのみ、"1"を出力し、それ以外では"0"を出力する。
■論理和(OR)
少なくとも1つのビットが"1"の入力のときに、"1"を出力し、両方のビットがともに"0"の入力のときのみ"0"を出力する。
■論理右シフト
ビット列全体を指定された数だけ右にずらす。はみ出た最下位ビット部分は無視し、先頭ビットは"0"で埋める。
例)11111111 >> 1 = 01111111
11111111 >> 2 = 00111111
■論理左シフト
ビット列全体を指定された数だけ左にずらす。はみ出た先頭ビット部分は無視し、最下位ビットは"0"で埋める。
例)11111111 << 1 = 11111110
11111111 << 2 = 11111100
さて、問題を見ていきましょう。
ア:トレースしていきます。
1.r ← 00000000 AND 00000001 = 00000001
rbyte ← 00100101
2.r ← 00000010 AND 00000001 = 00000011
rbyte ← 00010010
3.r ← 00000110 AND 00000000 = 00000110
rbyte ← 00001001
4.r ← 00001100 AND 00000001 = 00001101
rbyte ← 00000100
5.r ← 00011010 AND 00000000 = 00011010
rbyte ← 00000010
6.r ← 00110100 AND 00000000 = 00110100
rbyte ←00000001
7.r ← 01101000 AND 00000001 = 01101001
rbyte ← 00000000
8.r ← 11010010 AND 00000000 = 11010010
rbyte ← 00000000
したがって、「ア」は適切。
イ:「rbyte ← rbyte >> 7」は変数 rbyte を7ビット右にシフトするという意味
なので、先頭から7ビットがすべて 0 になってしまいます。
したがって、「イ」は不適切。
ウ:トレースします。
r ← 01001011 << 1 OR 01001011 >> 7 (=10010110)
rbyte ← 10010110
r ← 10010110 << 1 OR 10010110 >> 7 (=00101101)
rbyte ← 00101101
r ← 00101101 << 1 OR 00101101 >> 7 (=01011010)
rbyte ← 01011010
.......
ここまでくると左のビットが一番右に移動しているだけで、
8回繰り返してももとの数字になるだけということがわかりますね。
したがって、「ウ」は不適切。
エ:トレースします。
r ← 01001011 >> 1 OR 01001011 << 7 (=10100101)
rbyte ← 10100101
r ← 10100101 << 1 OR 10100101 >> 7 (=11010010)
rbyte ← 11010010
r ← 11010010 << 1 OR 11010010 >> 7 (=01101001)
rbyte ← 01101001
.......
ここまでくるとウのときと同様に右のビットが一番左に移動しているだけで、
8回繰り返してももとの数字になるだけということがわかりますね。
したがって、「エ」は不適切。
よって、選択肢は「ア」となります。
最後に
いかがだったでしょうか。
この問題は計算をしないといけないので、手間がかかる問題でした。
私であれば、ひとまずこの問題は飛ばして次の問題に取り組みます。
論理シフト・論理演算の基礎が分かっていれば、時間はかかりますが解くことはできます。また、この手の問題は、自身の計算ミスも考えられるので全ての選択肢を確認する必要が出てくるかと思います。
解ける問題から先に解いて、時間がかかる・難しい問題は後で時間をかけて取り組むようにしましょう!