「2進数と論理演算が難しい…」「科目Bを時間内で解くコツは?」|基本情報お悩み相談室

この連載は、基本情報技術者試験の受験者を対象としたものです。
毎回2つずつ、受験者が抱えているお悩みに、講師歴20有余年の私がお答えします。
お悩みの中には、技術的なものもあれば、精神的なものもあります。
どちらも解決して、スッキリした気分で受験勉強をしましょう。

矢沢 久雄
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”。
大手電機メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。大手電機メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
■主な著書
「プログラムはなぜ動くのか(日経BP社)」「でるとこだけ!基本情報技術者(翔泳社)」など多数
【お悩み1】
2進数と論理演算がまったくわかりません。どのように学習すれば理解できますか?
私の講師経験上、2進数と論理演算は、とても多くの受験者が苦手としています。
これらに関する問題が難しいのは、単に用語の意味を覚えるだけでは解けないからです。
なぜそうなるのか? なぜそうする必要があるのか?
根本的な仕組みや理由を理解する必要があります。
ですから、他の分野より、じっくりと時間をかけて丁寧に学習しましょう。
はじめに、なぜ2進数と論理演算に関する問題が出るのかを知ってください。
それは、コンピュータの内部の仕組みとして、2進数と論理演算が使われているからです。
コンピュータ内部では、電線1本で2進数の1桁を伝えています。
電線の電圧が高ければ1で、低ければ0です。
コンピュータの内部では、トランジスタという素子(電気的にON/OFFができるスイッチだと考えてください)を使って、AND、OR、NOT、XORといった論理演算が行われています。
コンピュータを外部から使うときには、10進数で加減乗除の四則演算を行えますが、コンピュータの内部では、それらが2進数と論理演算に置き換えられているのです。
つまり、2進数と論理演算に関する問題は、コンピュータの内部の仕組みに関する問題なのです。
2進数と論理演算に関する問題のテーマには、2進数と16進数の変換、2の補数表現、固定小数点数、浮動小数点数、マスク演算、シフト演算、半加算器、全加算器、などがありますが、これらをいきなり学習したら、まったくわからなくても当然でしょう。
これらのテーマを学ぶ前に、2進数と論理演算に慣れておく必要があるのです。
2進数に慣れるには、2進数で0~1111まで数える練習をするとよいでしょう。
(1)メモ用紙かノートを用意してください。
(2)2進数の0~1111は、10進数の0~15に対応するので、まず10進数の0~15を縦に並べて書いてください。
(3)つぎに、それらの横に2進数を書いてください。
0、1、10、11、100、・・・、1111と書いて行くのです。
(4)もしも、最後が1111にならなかったら、どこかで数え間違いをしているので、もう一度やってください。
できるようになるまで、やってください。
そうすれば、0と1だけで数を表現すること、1の次に桁上がりすること、といった2進数の性質に慣れるはずです。
論理演算(2進数のデータに対する論理演算)に慣れるには、AND、OR、NOT、XORという論理演算の結果の一覧を、メモ用紙かノートの上に書き出す練習をするとよいでしょう。
(1)まず、1桁の2進数の論理演算のすべてのパターンを書き出します。
たとえば、ANDなら「0 AND 0 = 0」「0 AND 1 = 0」「1 AND 0 = 0」「1 AND 1 = 1」です。
OR、NOT、XORでも同様にやってください。
(2)それができたら、複数桁の2進数を論理演算します。
例として、4桁の「0101」と「0011」を論理演算するとしましょう。
「0101 AND 0011 = 0001」「0101 OR 0011 = 0111」「0101 XOR 0011 = 0110」になります。
NOTは、1つのデータを反転するものなので、「0101」でやってみましょう。
「NOT 0101 = 1010」になります。
このような地道な練習を、スラスラできるようになるまで繰り返してください。
そうすれば、AND演算は両方が1のときだけ1になる、OR演算は少なくともどちらか一方が1のとき1になる、といった感覚をつかめるはずです。
2進数と論理演算に慣れたら、教材を使って、問題に取り上げられるテーマごとに、じっくりと時間をかけて丁寧に学習していきましょう。
その際に、重要なのは、なぜそうなるのか? なぜそうする必要があるのか? を知ることです。
そういう決まりだから、では理解できません。
たとえば、2の補数表現が必要なのは、0と1だけを使う2進数では、そのままではマイナスの数を表せないからです。
マイナスの数を表すために何らかの工夫が必要であり、その代表的な方法が2の補数表現なのです。
半加算器と全加算器を学ぶ理由は、四則演算が、論理演算の組合せて実現できることを知るためです。
四則演算には、加減乗除がありますが、試験には、加算を行う半加算器と全加算器が取り上げられます。
苦手分野を克服するには、教材選びも重要です。
そういう決まりだから、という説明ではなく、コンピュータの仕組みに照らし合わせて、なぜそうなるのか? なぜそうする必要があるのか? をちゃんと説明している教材を選んでください。
書店に行って様々な教材の内容を見て、2進数と論理演算をちゃんと説明しているものを選んでください。
【お悩み2】
科目Bの問題を解くのに時間がかかってしまいます。短い時間で解く方法はありますか?
科目Bは、試験時間100分で全20問に解答します。
1問あたりの解答時間は、平均して100分÷20問=5分であり、よほど試験に慣れている人でない限り、全問を解くのは困難でしょう。
試験の合格点は、1000点満点で600点以上です。
それぞれの問題の配点は公表されていませんが、単純に計算すると60%以上つまり20問×0.6=12問以上できれば合格です。
試験時間100分で、12問以上できることを目指しましょう。そうすれば、1問あたりの解答時間は、平均して100分÷12問=約8.3分です。
たったの5分と比べたら、ずいぶん気持ちが楽になったでしょう。
試験の内容は、問1~問16が「アルゴリズムとプログラミング」に関する問題で、問17~問20が「情報セキュリティ」に関する問題です。
アルゴリズムとプログラミングの問題は、「プログラムの基本要素」「データ構造およびアルゴリズム」「プログラミングの諸分野への適用」というカテゴリがあり、問題ごとに難易度にかなりの差があります。
したがって、難しい問題に着手して時間を使ってしまうと、他のやさしい問題を解く時間が足りなくなってしまいます。
それに対して、情報セキュリティの問題は、どの問題も同じ程度の難易度です。
そこで、12問以上できるための作戦としては、先に問17~問20の情報セキュリティの全4問を解き、残りの時間で問1~問16のアルゴリズムとプログラミングの全16問の中から時間がかからなそうな順に8問を解くとよいでしょう。
4問+8問=12問になり、合格点に達します。
全16問中の8問ですから、ずいぶん気持ちが楽になったでしょう。
もちろん、8問を解いて時間に余裕があるなら、他の問題も解いてください。
とは言え、平均して1問あたり約8.3分は、それほど余裕がある時間ではないでしょう。
短い時間で解くための工夫が必要です。これ以降では、問題を短い時間で解くコツを、いくつかアドバイスしましょう。
情報セキュリティの問題を短い時間で解くコツは、先に設問と選択肢を見てから、問題を読むことです。
情報セキュリティの問題は、事例(架空の事例です)風になっています。
そのため、問題の冒頭に「A社は、放送会社や運輸会社向けに広告制作ビジネスを展開している。・・・」や「A社は従業員450名の商社であり、昨年から働き方改革の一環として、在宅でのテレワークを推進している。・・・」のような事例が書かれています。
事例の中には、事例らしく見せるための部分が多くあり、それらは設問を解くために必要ありません。
必要がない部分を読み飛ばせるように、先に設問と選択肢を見ておくのです。
そうすれば、短い時間で問題を解けます。問題によっては、設問と選択肢を見ただけで(事例を読まなくても)、正解を選べる場合もあります。
ただし、コツだけがわかっても、情報セキュリティに関する用語や概念の知識がないと、問題を解くこと自体が困難でしょう。
もしも、知識が不足していると感じたなら、科目Aの過去問題を数多く解いて知識の補充をすることをお勧めします。
試験によく出る用語や概念というものがいくつかあり、それらは科目Aでも科目Bでも同じだからです。
科目Aは、用語や概念に関する問題であり、科目Bは、それらを文章の中に散りばめて事例風に仕立てた問題です。
科目Aの過去問題を数多く解けば、科目Bの問題もできるようになります。
アルゴリズムとプログラミングの問題を短い時間で解くコツは、いくつかあります。
ただし、コツだけがわかっても、プログラミングの経験がないと、問題を解くこと自体が困難でしょう。
もしも、まったくプログラミングの経験がないなら、この機会に、何らかのプログラミング言語でプログラミングの学習をしてください。
どのプログラミング言語でもOKですが、オブジェクトを使った問題も出るので、オブジェクトを使えるJava、C#、Pythonなどの言語がお勧めです。
学習してほしいテーマは、2つあります。
1つは、変数、配列、関数、オブジェクト、演算子、分岐、繰り返し、など「プログラムの基本要素」のカテゴリです。
もう1つは、ソート、サーチ、リスト、木、など「データ構造およびアルゴリズム」のカテゴリです。
それぞれ、1冊にまとめられた教材があるので、それらを使って学習してください。
「プログラミングの諸分野への適用」のカテゴリに関しては、プログラミングの経験があれば問題を解けますので、心配無用です。
プログラミングの経験をして、プログラミングとアルゴリズムの勘所をつかんだなら、短い時間で解くコツを意識して問題を解いてください。
以下にコツを示します。
問題の多くは、プログラムの一部が空欄になっていて、空欄に入る正しいプログラムを選択肢から選ぶ、という内容になっています。
選択肢があるのですから、選択肢を大いにヒントにしてください。
もしも、正解を選べなかったら、正しくないと思われるものを消してください。選択肢が減ると「あっ、そうか!」と気が付く場合がよくあります。
プログラムを読むとは、データの入れ物である変数に具体的な値を想定して、処理の流れと変数の値の変化を追いかける(トレースする)ことです。
暗算でもわかるような単純な値を想定して、プログラムを読んでみましょう。
そうして、空欄にたどり着いたら、選択肢の変数に具体的な値を設定すれば、正しいものを選べるはずです。
繰り返し処理を読み取ることが苦手、という受験者が多いようです。
繰り返し処理を読み取るコツは、繰り返しの最初の1回目の処理における具体的な値を想定して、その値で成り立つ選択肢を選ぶことです。
繰り返しの最初から最後までを一気にイメージすようとするから難しいのです。
最初の1回目の処理だけをイメージすれば難しくありません。
「プログラミングの諸分野への適用」のカテゴリの問題は、一見して難しそうですが、実はそうではありません。
問題に示された手順や数式とプログラムを対応付ければ、問題を解けるようになっています。
ただし、それができるのは、プログラミングの経験があってこそです。
したがって、アルゴリズムとプログラミングの問題を短い時間で解くには、なんと言ってもプログラミングの経験が重要なのです。
今回は、「2進数と論理演算がまったくわかりません」「科目Bの問題を解くのに時間がかかってしまいます」というお悩みにお答えしました。
同じお悩みをお持ちの皆さんの参考になれば幸いです。
それでは、またお会いしましょう!
SEプラス公式YouTubeのIT教育チャンネルでも、矢沢のお悩み相談室シリーズを公開しています!
過去問題の活用方法と試験前の準備について語っているシリーズ2の動画はこちらから!
これから試験勉強をはじめる方は、ぜひ動画もご確認ください!
免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
※独習ゼミは、受験ナビ運営のSEプラスによる試験対策eラーニングです。

『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数