CONTENTS / BACK-PAGE / NEXT-PAGE

1 前知識

1.1 プログラムとは

 学園祭,コンサートのプログラムなどよく耳にしたことがあると思うが、「プログラムとは?」と聞かれたときどのように答えるべきであろうか。
 簡単に言うと、「あーしてこーしてあーする」といったように一連の事柄を順序に従って伝えるものである。計算機についても同様で、利用者が計算機に対して行って欲しい一連の事柄を伝えるための意思表示の方法、作業指示書,メッセージなどのようなもの,それがプログラムである。

 人間が言葉の通じない人に意思を伝えるためには、通訳を通して自分の言葉を相手のわかる言葉に翻訳して伝えてもらう。それと同じように計算機にメッセージを伝えるには、計算機用の言葉が必要である。それがプログラム言語と呼ばれるもので、プログラムを表現(記述)するための言葉である。

 プログラム言語でプログラムを記述することをプログラミングと言う。そして人間の言葉にも日本語、英語、フランス語、...とあるようにプログラム言語にもいろいろあり、今回取り上げるC言語もそのひとつである。さらにC言語でもいろいろ方言(特殊な関数や機能を持っている)があるがここではもっとも標準なANSI(American National Standard Institute:米国標準規格)Cを扱うことにする。最近のどんなC言語でもANSI Cを含んでいてさらに特殊な関数や機能を持っていることが多い。

 また、人間の言葉に文法があるように、プログラム言語にも文法があり、その文法に合うように正しくプログラミングしないと、人間の意思(計算機にして欲しいこと)を計算機に伝えることができない。

1.2 ハードとソフト

 計算機は大別するとハードウェア、ソフトウェアというカテゴリーで構成される。ハードウェアとは計算機を構成する物理要素、すなわち機械,装置,回路などを指す。ソフトウェアとは、その装置を有効に働かせるための機能,手法,技法などを総称したもので、プログラムもソフトウェアの分類に入る。図1−1に、身近な物でハードウェア,ソフトウェアの例を示す。

図1−1 ハードウェアとソフトウェア
ハードウェア メディア(媒体) ソフトウェア
CDプレーヤー コンパクトディスク 音(音楽)
ビデオデッキ ビデオテープ 画像,音(映画)
LDプレーヤー レーザーディスク 画像,音(映画)
コンピュータ(計算機)フロッピーディスク等プログラム,データ

 ソフトウェアは利用装置にかかるメディアの中身であり、必ずソフトウェアとハードウェアの間にはメディアが存在する。場合により、ソフトウェアが記録されているメディアを含めてソフトウェアと呼ぶこともある。通常計算機の世界では、ソフトウェアと言えばプログラムのことと考えてもよい。

 さらに、プログラムにもいろいろな種類があり、以下のように分類できる。

(1)オペレーティングシステム...
計算機ハードウェアのすぐ上を覆っていて、利用者と計算機とのやり取りや、他のプログラム(アプリケーションプログラム等)を管理・実行するプログラムである。

(2)アプリケーションプログラム...
各々の利用に応じて作られたプログラムで、通常これらを用いて作業することになる。アプリケーションプログラムで代表的なプログラムをいくつかあげる。

1.エディタ
プログラムを記述するための道具で、計算機世界のノートとペンと考えてよい。
2.コンパイラ
利用者の作成したプログラム言語の文法をチェックし、計算機が理解できるように翻訳するプログラムである。これによりプログラミングしたものが実行できるようになる。
3.ワードプロセッサ
日本語や英語の文章を作成し,文字の大きさを変えたり,経線を引いたりして文字を飾り,プリンタに印字させる。
4.表計算ソフト
数値データの集計,計算,表作成などを行う。
5.ゲームソフト
子供の視力と姿勢を悪くし,軟弱な子供を育てる?

(3)ユーザ定義プログラム...
利用者(※ユーザ:コンピュータを利用して作業する人)が作るプログラムである。ユーザ定義プログラムは、アプリケーションプログラムにも成り得る。

図1−2 ソフトウェアの関係
図1-2/ptech012.gif

1.3 計算機システムの概要

 計算機システム(単に計算機とも呼ぶ)はハードウェアとソフトウェアが一体になって目的を達成するシステムである。計算機システムの特徴として以下の3つがあげられる。

 (1)プログラムで与えられた単純な動作を極めて高速でしかも正確に実行する。
 (2)記憶能力を持つ。
 (3)単に計算をするばかりではなく、論理的な判断や比較機能を持つ。これらの特徴をいかに有効に活用するかは、すべてプログラムに依存する。

 計算機システムを構成する代表的なハードウェアを紹介する。

・CPU
計算機の中心部であり様々な演算をする論理回路と演算結果を一時的に蓄えるレジスタからなる。人間の頭に対応する。
・メモリ
命令(プログラム)やデータを記憶するためのもので、メモ用紙的な役割をする。通常計算機の電源が切れるとメモリの内容は消えてしまう。メモリへのデータの読み書きは高速に行える。
・入力装置
計算機へ命令を伝えるための装置で、計算機の目や耳のようなものである。キーボード,マウスなどがこれにあたる。
・出力装置
計算機からのメッセージや実行結果を得るための装置で、計算機の口や手のようなものである。ディスプレイやプリンタなどがこれである。
・外部記憶装置
ハードディスクやフロッピーディスクなどで、プログラムやデータを蓄えておくための装置である。メモリのように高速にデータの読み書きができないが、大容量のデータを長時間格納できる。キーボード,ディスプレイをあわせて計算機端末もしくは端末(ターミナル)と呼ぶ。

図1−3 計算機ハードウェアの構成
図1-3/ptech013.gif

1.4 計算機が理解できる言葉(情報の表現)

 計算機が理解できる言葉はCPU内部を流れる電流によって表される。すなわち,電流が流れている時を1,流れていないときを0として表す。0と1の組み合せで数値,文字,画像などの情報を扱うことができるが,詳細については後の機会で紹介しよう。ここでは数値(整数,実数)と文字の計算機内での表現(以下内部表現という)について述べる。

 ここから先の話は,少々数学的で複雑なため,わかりにくいかもしれないが,計算機の内部の構造を知る上で非常に重要なので,何とか理解していただきたい。また,5章を読むときの手助けにもなろう。

記号の解説:以下の解説に出てくる記号についてここで解説しておく。この記号は,この講座だけではなく計算機の世界でよく用いられる。

かけ算X * Y → X と Y をかける
割り算X / Y → X を Y で割る
べき乗X ^ Y → X の Y 乗
未満 1.9 < 2
より上5 > 4
<= 以下 1.9 <= 2 2 <= 2
>= 以上 5 >= 4 4 >= 4

 先にも述べた通り,計算機内部では情報は0と1つまり電流のONとOFFの組み合せにより表現されている。0または1で1つの情報を持つことになる。この単位をbit(ビット)(ちょびっとと覚えればよい)と呼び、情報の最小単位である。0または1が8桁集まれば8bitということになる。また、8bitを1byte(バイト)と呼ぶことがある。

 計算機が16ビットマシンとか32ビットマシンとか言われているが、これは1つの数値や命令を表すのに用いるbitの桁数を言っている。当然32ビットマシンは16ビットマシンの2倍のbitの桁数を扱っているため、より大きな桁の数値が扱えることがわかるであろう。

 0と1を扱うためには、2進数の考え方がとても重要である。また、2進数では0と1の集まりで桁数も多くなってしまい、人間には見づらいものになってしまう。そこで便宜上、2進数を4桁づつに区切りそれぞれを16進数表示したものをしばしば扱うことがある。以下我々が日常使っている10進数と計算機により近い2進数,16進数の関係を以下例を用いながら、解説する。

 念のために2進数とは0と1なら表現される数で、16進数とは0−15の数から表現される数である。16進数の場合10−15の代りにアルファベットのA−Fを用いる。我々の身の回りで馴染みのあるもので、時計の60進数,24進数などを思い浮かべれば感じがつかめるであろう。詳細は、下記の例を見れば納得していただけると思う。


<例1> 10進の25を2進数に変換する。

例1/ptech01a.gif ・25を2で割る。答は12、余り1である。
 この余りが2進数の下第1桁になる。

・つづいて12を2で割る。答6,余り0。
 この余りが2進数の下第2桁になる

・同様の操作を繰り返す。

 余りを順に下から上に並べると11001となり、これが10進数25を2進数表示したものである。以下便宜上、(25)10 = (11001)2と書くことにする。

例2/ptech01b.gif

<例2>(0.56)10を2進数に変換する。

  • 小数点以下の変換は、例1とは別の方法を使う。
    まず、0.56×2を計算する。
    このときの小数点のすぐ左つまり1の位の数が2進数の小数第1位の数字になる。

  • つづいて0.12×2を考える。
    答は0。24になり1の位の数字0が、2進数の小数第2位になる。

  • 同様に上記の操作を繰り返して行う。
    よって、
      (0.56)10=(100011・・・)2
    となる。

 この例のように小数以下の数値を2進数に変換する場合、ほとんどの場合正確に変換できない。つまり、計算機では実数(小点以下がある数)は正確には表せず、多少の誤差を持っていることに注意すること。
 0.56は計算機の内部では0.56に非常に近い数値であることを忘れずに!


<例3>(25.56)10を2進数に変換する。

 例1と例2を組み合せて
 (25.56)10=(11001.10001111・・・)2
 となる。

<例4>(25.56)10を16進数に変換する。

 例3のように2進数で表示すると、桁数をたくさんとってしまい間違いの原因となり易い。そこで、便宜上それを16進数表示する。
 まず、小数点を境に4桁づつ区切る。つまり

   1 | 1001 .1000 | 1111 | ・・・

 となる。区切ったそれぞれを16進数で表示してやればよい。つまり

   1 |   9  .  8  |   F  | ・・・

 となり、
  (25.56)10=(19.8F・・・)16
 となる。



上記の例により、10進数と2進数,16進数の関係がわかったことと思う。それでは本題の計算機の内部表現について解説する。

(1)整数の表現(固定小数点数)

 計算機内部では、整数は例1のように2進数つまり電流のON,OFFで表現されている。しかし、負の整数はどのように表現されているのだろうか? 通常2の補数表示が用いれている。これは2進数の0と1を反転させ1を加えたものである。

<例5>(−35610)10の内部表現は、

  ・まず(36510)10 = (1000 1100 0001 1010)2 となる。
  ・次に0と1を反転させると、0111 0011 1110 0101となる。
  ・1をくわえると、     0111 0011 1110 0110 となる。
  ・よって(−35610)10=(0111001111100110)2となる。

表1−4 計算機の内部表現(16bit計算機の例) 表1-4/ptech014.gif

 表1−4に16ビットマシンの内部表現を示す。これからもわかるように、ゼロまたは正の整数の時には最上位ビットが0に、負の整数の時には最上位ビットが1になっている。つまり最上位ビットを見れば負の整数なのかそれいがいなのかが、わかるようになっている。

図1−5 固定小数点表示の内部表現(16ビットマシンの場合)
図1-5

 また16ビット計算機で扱える整数の範囲は、−2^15(2の15乗:−32768)から2^15−1(32767)までである。同様に、32ビット計算機の場合は、−2^32(-2147483648)から2^32−1(2147483647)であることがわかる。


(2)実数の表現(浮動小数点数)

 9876543210のように計算機の扱える範囲を越えるような数値や実数のように小数点以下の数値も扱いたい時がある。このような時に、浮動小数点表現になる。図1−6に内部表現を示す。

図1−6 浮動小数点表示の内部表現
図1-6

 最上位ビットは符号部で数値データが負の時に1それ以外の時0になる。次の7ビットが指数部で、数値をm*(16^e)の形で表現した時のeに64を加え2進数で表示したものである。e+64が7ビットで表現できないとき、すなわち

  −64 <= e <= 63

のときは、浮動小数点数では表現できない。仮数部では数値をm*(16^e)の形で表現したときのmを2進数で表示しその上位24桁をとる。それ以降の桁は、切り捨てられる。この仮数部で表現できる範囲が、有効桁数となる。

<例5> (−1.1)10 を浮動小数点表示する。

  • (−1.1)10 = −(1.3333・・・)16 
            = −(0.13333・・・)16 * 16^1
  • (−1.1)10 は負の実数であるから、符号部は1。
  • 指数部は、e=1であるから、1+64=65を2進数で表現し、1000001となる。
  • 仮数部は、m=(0.1333・・・)であるから、小数点以下の1333を2進数で表現し上位24桁をとると、000100110011001100110011となる。
  • よって 1000 0001 0011 0011 0011 0011 0011 0011 が内部表現である。16進数を使って (81333333)16 が内部表現であるとも言ってもよい。

**注意**

 計算機の内部は2進数(電流のON/OFF)で表現されているため、正確な実数を表現することができないことを常に頭に入れておくこと。たとえば、1/3*3を計算すると、(0.33333・・・)*3を経て、0.99999・・・という答がでる。


(3) 文字の表現

 計算機の内部では、文字(一般的にはアルファベット,数字,特殊記号をさす)は7ビットや8ビットを使って表現されている。計算機で利用できる文字は、計算機(オペレーティングシステム)やプログラム言語に依存する。扱える文字全体を文字セットもしくは文字コードと呼び、一般的によく使われるコードにASCII(American Standard Code for Information Interchange)がある。表1−7にASCIIコード表を示す。


表1−7 ASCIIコード表
表1-7

**注意**

 計算機の内部では,実数,整数,文字,さらにはプログラムの区別はなく,単に0,1のbit列にすぎない。これらの区別は,アプリケーションプログラムによって行われることが多い。

CONTENTS / BACK-PAGE / NEXT-PAGE