連載
» 2005年05月31日 00時00分 公開

基本情報技術者試験講座(1):コンピュータの基本、2進数を理解しよう

エンジニアなら避けては通れない、情報処理技術者試験。すべての試験の基礎となるのは、基本情報技術者試験だ。そのうちの午前試験に必要な知識を本連載でマスターし、秋期試験合格を目指そう!

[有限会社 G.F.インフィニティ,Project - ∞]

 今回から5回にわたって「基本情報技術者試験(午前)」の対策講座を掲載します。内容としては、試験によく出題されている部分にポイントを絞ります。頻出する部分を問題形式で取り上げますので、確実に点数を取れるよう、試験対策や試験直前の確認用として利用してください。

 「基本情報技術者試験(午前)」の問題数、合格点と試験範囲は下記のとおりです(☆の数は出題数を5段階で表したもの)。

問題数 80問
合格点 公開はされていませんが、70〜75%で合格とされています。
試験時間 150分
1. コンピュータ科学基礎 ☆☆☆☆☆
2. コンピュータシステム ☆☆☆☆☆
3. システムの開発と運用
4. ネットワーク技術 ☆☆
5. データベース技術
6. セキュリティと標準化
7. 情報化と経営
8. 監査

 なお、試験は年2回(春期・秋期)実施されます。試験は午前と午後に分かれていて、午前は主に知識問題、午後はプログラミングや知識の応用問題が出題されます。今回触れない午後の問題では、長文の応用問題が13問出題され、そのうち7問を選んで解答する形式になっています(試験時間は午前同様150分)。

 以降は「基本情報技術者試験(午前)」を上記の範囲に沿って、各種問題を解きながら解説していきます。

コンピュータ科学基礎 〜情報の基礎論理〜

 

確認しておく内容

  • 基数と基数変換
  • 補数
  • 論理シフト、演算
  • 文字の表現

 

基数と基数変換

 数値を表現する際に、各けたの重み付けの基礎として用いる数を「基数」と呼びます。わたしたちが一般的に使用している10進数の場合、右から順に「1の位」「10の位」「100の位」というように10倍ごとにけたが繰り上がるため、「基数は10」となります。同様に、2進数、8進数、16進数の基数は、それぞれ2、8、16となります。例えば2進数の場合、右から順に「1の位」「2の位」「4の位」「8の位」のように2倍ごとにけたが繰り上がります。

 10進数は、「0」から「9」までの10種類の数字を用います。しかし、コンピュータの電子回路は基本的に10種類もの数字を扱うようにはできていません。よってすべての数値を2進数に置き換え、「0」と「1」の2種類の数字をスイッチのON/OFFに対応させて処理をしています。

 それでは、基数変換の問題を解いてみましょう。

 ■問題1

10進数の「100」を8けたの2進数で表したものを次の中から選択してください。

a.01101010
b.01110100
c.01100100
d.01100110

正解:c

 ■解説

 10進数を2進数へ変換するには、10進数で表現された数値を2進数の基数「2」で割っていきます。割り切れれば0を、割り切れなければ余りの1を記入し、その商をまた2で割ります。

        2 ) 100
        2 )  50 ……0
        2 )  25 ……0
        2 )  12 ……1
        2 )   6 ……0
        2 )   3 ……0
        2 )   1 ……1
           0 ……1

 商が0になったところで、余りを下から並べます。並べると「1100100」となりますので、正解はcの「01100100」です。

 余りを並べる順番(下から)を忘れないようにしましょう。

 ■問題2

2進数の「10110001」を10進数に変換したものを次の中から選択してください。

a.169
b.177
c.175
d.172

正解:b

 ■解説

 2進数を10進数へ変換するには、まず2進数の各けたの重みを10進数に直してみます。重みは基数の乗数で表せますので、右から「1、2、4、8……」となります。

重み
128
64
32
16
8
4
2
1
2進数
1
0
1
1
0
0
0
1

 対応する2進数のけたが「1」になっているところの重みを足すと、「128+32+16+1=177」となります。正解はbの「177」です。

 ■問題3

10進数の「0.4375」を2進数に変換したものを次の中から選択してください。

a.0.1111
b.0.1001
c.0.0111
d.0.011

正解:c

 ■解説

 2進数の小数点以下nけたには、2 の-n乗の重みが付いています。各けたの重みは下記のようになります。

重み
0.5
0.25
0.125
0.0625
0.03125
……

 問題2と同じく、2進数の値が1となっているけたの重みを足すことにより、10進数へ変換できます。選択肢に挙げられている2進数をすべて10進数へ変換し、「0.4375」になるものを探します。

「0.1111」 → 0.5+0.25+0.125+0.0625=0.9375
「0.1001」 → 0.5+0.0625=0.5625
「0.0111」 → 0.25+0.125+0.0625=0.4375
「0.011」  → 0.25+0.125=0.375

 上記より、正解はcの「0.0111」です。

 ■問題4

16進数の「AB」を10進数で表すといくつになりますか。次の中から選択してください。

a.166
b.171
c.175
d.179

正解:b

 ■解説

 16進数の基数は16であり、10進数の0〜15を1けたで表します。10進数の10〜15は、0123456789ABCDEFというように、英字のA〜Fで表します。

 16進数で表した値を10進数へ変換するには、2進数から10進数への変換と同様、各けたの重みを足します。16進数であれば下記のようになります。

重み
4096
256
16
1
16進数
0
0
A
B

 16進数の「A」「B」はそれぞれ10進数の「10」「11」ですので、この重みを利用して計算すると「16×A+1×B=16×10+1×11=171」となり、正解はbの「171」です。

 また、16進数をいったん2進数に変換し、それを10進数に変換するという方法もあります。

 16進数の1けたは、4けたの2進数で表されます。この問題の16進数「AB」は、A→1010 B→1011となり、2進数の「10101011」と同じです。

 次に、この2進数「10101011」を下記のように重みを利用して変換します。

重み
128
64
32
16
8
4
2
1
2進数
1
0
1
0
1
0
1
1

 「128+32+8+2+1=171」となり、正解はbの「171」です。

 16進数から10進数への変換は、2進数を経由した方が手間はかかりますが、覚えることが少ないので簡単です。どちらの方法を使用しても構いませんが、計算間違いをしないよう気を付けてください。

 ■問題5

計算式「131−45=53」 は、何進法で成立しますか。

a.5
b.6
c.7
d.8

正解:c

■解説

 まず、問題の計算式を分かりやすいように足し算に直すと「131=53+45」となります。

 ここで最下位の1けたに注目します。最下位の1けたを10進数で計算すると「3+5=8」ですが、この計算式では「1」となっています。けたの繰り上げが発生していると考えられ、「3+5−1=7」でけたが繰り上げられたことから、7進法で計算していることが分かります。正解はcの「7」です。

補数

 通常、負の値は値の先頭にマイナス記号を付けることで表現しますが、コンピュータ上では負の値も2進数のみで表現しなければなりません。この表現方法として一般的に「2の補数」が用いられています。

 2の補数への変換方法は、

  1. 情報処理システムの用語
  2. 反転させた値に1を足す(2の補数)

 

それでは、補数の問題を解いてみましょう。

 ■問題6

2進数「0110」に対する1の補数と2の補数の組み合わせが正しいものを次の中から選択してください。

  1の補数 2の補数
a. 1001 1011
b. 1011 1001
c. 1010 1001
d. 1001 1010

正解:d

 ■解説

 「1の補数」は、与えられた数のビットを反転(0と1を逆に)したものであり、「2の補数」は、1の補数に1を足したものです。従って、問題の2進数「0110」の各ビットを反転させた「1001」が1の補数、この値に1を足した「1010」が2の補数となります。正解はdの「1001 1010」です。

 ■問題7

負数を2の補数で表現するとき、nビットで表現できる整数の範囲を次の中から選択してください。

    a.−2n−1〜2n−1−1
    b.−2n−1−1〜2n−1
    c.−2n−1〜2n−1
    d.−2n〜2n

正解:a

 ■解説

 正解はaの「−2n−1〜2n−1−1」です。これは公式として覚えておきましょう。例えば、「負数を2の補数で表現するとき、8ビットで表現できる整数の範囲」を求める場合、上記の公式に当てはめ、「−28−1〜28−1−1」→「−27〜27−1」→「−128〜127」となります。

 ■問題8

負数を2の補数で表すコンピュータで、2進数の「10011001」を10進数に直した値を次の中から選択してください。なお、第0ビットが1の場合「負の数」、0の場合「正の数」を表すものとします。

a.−101
b.−102
c.−103
d.+103
e.+105

正解:c

 ■解説

 この2進数「10011001」は、第0ビットが1であるため、「2の補数で表されたある値の負数」であることが分かります。

 「10011001」の2の補数を求めることにより、元の値に戻すことができます。

  1の補数(ビットを反転)……01100110
  2の補数(1の補数+1)……01100111

 求めた2の補数「01100111」を10進数に直すと「103」となり、初めの2進数「10011001」は103の負数「−103」を表していることになります。正解はcの「−103」です。

論理シフト、演算

 2進数の全ビットを左右にずらすことを論理シフトと呼びます。論理シフトを行うと、値は下記のように変化します。

左にnビットシフト : 2n倍になる
右にnビットシフト : 2−n倍(2nで割った値)になる

 従って、ビットをずらすだけで掛け算や割り算が行えます。

 :2進数「0101」を左に2ビットシフト

  (シフトした結果が2n倍(4倍)になることを確認)

2進数
0
1
0
1

10進数に変換すると「0101」→「5」

2進数を左に2ビットシフト
0
1
0
1
0
0

左へ2ビットずらし、空いたビットには「0」を入れる
結果、2n倍(4倍)の「20」であることが確認できる

それでは、論理シフトと演算の問題を解いてみましょう。

 ■問題9

2進数で表された正の整数を64倍するには、左に何ビットシフトすればよいのか次の中から選択してください。ただし、シフトによるあふれ(オーバーフロー)は発生しないものとします。

a.4
b.5
c.6
d.32
e.64

正解:c

 ■解説

 2進数の値を64倍するには「64=26倍」であることから、左へ6ビットシフトすればよいことになります。正解はcの「6」です。

 ■問題10

数値を2進数で格納するレジスタがあります。このレジスタに正の整数Yを格納し、その後、この値に対して「3ビット左にシフトしてYを足す」操作を行いました。シフトによるオーバーフローは発生しないものとした場合、レジスタの値はYの何倍になりますか。次の中から選択してください。

a.7
b.8
c.9
d.10

正解:c

 ■解説

 まず左に3ビットシフトするため、レジスタの値は元の数Yが「23倍=8倍」され、8Yとなります。そしてさらにYを足す操作があるため、「8Y+Y=9Y」で元の数の9倍になります。正解はcの「9」です。

 ■問題11

2進数Aを2n倍するには、Aをnビット左にシフトすれば求まります。例えば、「A×10」は下記の計算式によって求めることができます。

 (Aをnビット左にシフトした値)+(Aを1ビット左にシフトした値)

この計算式中のnビットに当てはまる値を次の中から選択してください。

a.3
b.4
c.5
d.6

正解:a

■解説

 「A×10」を2のべき乗に分解すると、「A×(8+2)」→「A×23+A×21」となります。この問題の「A×10」は、下記の計算式により求めることができます。

 (Aを3ビット左にシフトした値)+(Aを1ビット左にシフトした値)

 正解はaの「3」です。

文字の表現

 コンピュータでは、数値のほかに文字も扱うことができますが、「0」と「1」のビット列のデータしか扱えないため、文字も「0」と「1」で記憶する必要があります。下記の問題を参考に、「文字もビットで表す」ことを覚えておきましょう。

■問題12

英字の大文字A〜Zを表現するために最低限必要なビット数を次の中から選択してください。

a.4
b.5
c.6
d.7

正解:b

■解説

 英字のA〜Zは26文字あるため、この26文字を表現するために必要なビット数を求めます。「2進数nけたでは、2n種類の文字を表すことができる」ことを覚えておきましょう。従って、「26文字」が2の何乗かを考えれば求められます。

 24(16)<26<25(32)

 4ビットでは16文字しか表現できません。5ビットでは32文字まで表現できます。26文字を表現するためには、5ビットが必要となります。正解はbの「5」です。

■問題13

64ビットで表現できる文字の種類は58ビットで表現できる文字の種類の何倍になるか、次の中から選択してください。

a.16
b.32
c.64
d.128

正解:c

■解説

 「2進数nけたでは、2n種類の文字を表すことができる」ことを覚えていれば解ける問題です。64ビットで表現できる文字の種類は58ビットで表現できる文字の種類の何倍になるかを求めるので、

 264÷258 = 26(64)

 よって、64倍が正解となります。正解はcの「64」です。

まとめ

下記の内容をチェックしておきましょう。

・基数変換の方法(2進数、8進数、10進数、16進数など)

・2の補数への変換方法

  1. 値の1と0を反転させる(1の補数)
  2. 反転させた値に1を足す(2の補数)

・論理シフト演算

  左にnビットシフト : 2n
  右にnビットシフト : 2-n倍(2nで割った値)

・文字の表現

  2進数nけたでは、2n種類の文字を表すことができる

次回は、2.コンピュータシステムについて取り上げます。

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、基本情報技術者試験(午前)をテーマとして取り上げています。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

8月8日10時30分〜16時30分の間、システムメンテナンスのため記事の一部表示や資料のダウンロードができなくなります。ご理解のほどよろしくお願いいたします。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。