コンピュータ

データ表現 コンピュータの内部では,データを2進数で表現します.2進数とは, 01のみで値を表現した数です.この1桁を ビット(bit)と いいます.例えば,3ビットの2進数,
110
は,10進数の 6を表します. 2進数を10進数に変換するためには,以下の計算をします.
\begin{displaymath}1桁目\times2^0+2桁目\times2^1+3桁目\times2^2+...+n桁目\times2^{n-1}\end{displaymath}

上の例では,
\begin{displaymath}0\times2^0+1\times2^1+1\times2^2 = 0+2+4 = 6\end{displaymath}

となります.データを表現する時, 2進数では冗長となってしまうため非常に不便です.そのため, 0~7を使った8進数や, 0~9,A~Fを使った16進数を用いて データを表現することがあります. (最近では,16進数で扱う場合が多いようです). 2進数から,8進数,16進数に変換するのは簡単で,各々3ビット,4ビットずつ 集めればよいのです.例えば,16ビットの2進数,
1011001101010101
は,3ビットずつ集めると,
1 011 001 101 010 101
となり,これらをそれぞれ 0 7に対応させると,
1 3 1 5 2 5
となるので,8進数表現では 131525になるということです. 16進数の場合も同様で,4ビットずつ集めて,
1011 0011 0101 0101
とし,これらをそれぞれ 0 9 A Fに 対応させると,
B 3 5 5
となり, B355が16進数表現です.
表 1 : 各進数の対応表
10進数 2進数 8進数 16進数
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
ビットとバイト 先述のように,2進数の 0または, 1の1桁をビットいいますが, ビットを集めて8ビットで,1 バイト(byte)といいます. 16進数1桁は4ビットを要するので,1バイトは16進数2桁で表現する ことができます.ある1バイトのビットパターンが,
01101010
である時,この1バイトを16進数2桁,すなわち,
6A
と表現することができます. キロ,メガ,ギガ,テラ 1キロメートル,1キログラムのように, キロ($K$)は, 1000を示しますが, コンピュータでは,習慣的に 1024でキロを示します.それは, 1024$2^{10}$に相当し,2進数の世界で扱いやすいからです.同様に,
\begin{displaymath}K\times K = M\end{displaymath}

より,$M$ メガといい,
\begin{displaymath}1024\times1024 = 2^{20}\end{displaymath}

$2^{20}$に相当します.以下順次,ギガ($G$),テラ($T$)という単位があります.
表 2 : キロ,メガ,ギガ,テラ
  計算式
キロ($K$) ${\tt 1024}$ $2^{10}$
メガ($M$) ${\tt 1024\times1024}$ $2^{20}$
ギガ($G$) ${\tt 1024\times1024\times1024}$ $2^{30}$
テラ($T$) ${\tt 1024\times1024\times1024\times1024}$ $2^{40}$
データの大きさ 2進数で,データを表現する場合,その大きさをいつも意識しなければなりません. 例えば,16進数1桁は 0 Fまで16種類の値を表現 でき,大きさは4ビットを要し,8ビット(1バイト)では,
\begin{displaymath}16\times16 = 256\end{displaymath}

256種類の値を表現できます.より大きな値では,どうでしょう.例えば, 24ビットは,$2^{10} = 1024$より,10ビットで1024種類($1K$種類),20ビットで $1M$種類(上の表より),残りの4ビットは16種類より,
\begin{displaymath}1M\times16 = 16M\end{displaymath}

$16M$種類の値を表現できることがわかります.このようにしてキロ,メガ,ギガ, テラを使うと簡単に,計算することができます.この計算は,後述する記憶(メモリ)の 大きさと,番地づけに関係があります.
表 3 : データの大きさ
ビット数 計算式 表現できる値の数
1 $2$ $2$
4 $2^4$ $16$
10 $2^{10}$ $1024$($1K$)
12 $1K\times4$ $4K$
20 $2^{20}$ $1M$
24 $1M\times16$ $16M$
30 $2^{30}$ $1G$
32 $1G\times4$ $4G$
40 $2^{40}$ $1T$
コンピュータ コンピュータ(computer)は,日本語では計算機と訳しますが,最近では, 計算するだけでなく,さまざまな道具や,環境の一部として位置づけることが できます.また,人間に近い機械として,または人間に代わるものとして, 一部では,研究されていますが,現在のところ, 機械の粋を脱したものではありません. 本書で紹介する,C言語を代表としたプログラミング言語を用いて,コンピュータに 処理内容を教えてあげることが必要です.もともと,プログラミング言語は, 命令(instruction)から発展しました.プログラミング言語は,大きく分けて 2種類のレベルがあります.
\begin{displaymath}\left\{\begin{array}{l}
低水準言語\ ({\tt low\ level\ languag...
...\
高水準言語\ ({\tt high\ level\ language})
\end{array}\right.\end{displaymath}

低水準言語とは,よりコンピュータに近い形で表現された命令を 使って,手続きを表現する言語で,機械語やアセンブリ言語がこれに あたります.アセンブリ言語とは,機械語と1対1対応の命令語から なる言語で,各計算機によって異なります.一方,高水準言語とは, 一般に,各計算機に依らず,より人間が理解しやすい形で手続きを表現する 言語を指します.本書で紹介するC言語は,この範疇に入ります.しかし, C言語は,本来オペレーティングシステムなどの基本的なシステムを 記述するための言語( システム記述言語(system description language)という) として開発されたため, これらの境界線上にあるともいえます.
一般に,コンピュータは,以下の図で表現されます.
\begin{itembox}[c]{図1}
\expandafter\ifx\csname graph\endcsname\relax \csname ne...
...%}%\par\vskip\parskip\centerline {\box\graph}\vskip\parskip\par\end{itembox}
最近,主流のパソコンやワークステーション は,どちらもこの構成で表現することができます. バス(bus)とは,コンピュータの背骨にあたる部分で,すべての 情報は,このバスを通して伝達されます.通常,8の倍数本の線から なり,1本に付き同時に1ビットのデータを伝達します. よく"16ビットコンピュータ","32ビットコンピュータ"といいますが,この バスの本数により定義することが多いようです(CPUのレジスタの大きさより 定義する場合もあります). CPUとは,中央処理装置(central processing unit)の略で, 機械語を解釈し実行します. また,周辺装置 との情報の交換は,その間に, 入出力インターフェース(入出力装置) (input/output interface)という装置を通す必要があります. 内部にある,高速な 記憶(メモリ)(memory)のことを 主記憶(main memory)といい, 1バイト(8ビット)毎に管理され,通し番号がつけられています. その番号のことを 番地(address)といいます.通常,以下のような表( メモリマップという)で表現します.
\begin{itembox}[c]{図2}
\expandafter\ifx\csname graph\endcsname\relax \csname ne...
...%}%\par\vskip\parskip\centerline {\box\graph}\vskip\parskip\par\end{itembox}
データの大きさで用いた計算を使うと,番地割当て(addressing)の時, どれくらいの大きさの番地が必要か計算できます.例えば,$1M$バイトの 記憶を持つ計算機では番地を表現するために何ビット必要か,を考えると,
\begin{displaymath}2^{20} = 1M\end{displaymath}

より,20ビットあれば,$1M$種類の値を表すことがでます.20ビットで, 番地を表せばよいことがわかります. フロッピディスク コンピュータで情報処理をする場合に,情報を記憶する必要があります. そのための装置を 記憶(memory)といいます.記憶 は,一次記憶と,二次記憶に分けることができます.
\begin{displaymath}記憶\left\{\begin{array}{l}一次記憶\\ 二次記憶\end{array}\right.\end{displaymath}

一次記憶とは,主記憶のことで,二次記憶とは,テープ(tape),ディスク ( 固定ディスク(hard disk), フロッピディスク(floopy disk))など を指します.パソコンやワークステーションは, 固定ディスク,フロッピディスクを共に備えています.固定ディスクは, 入出力インタフェースの規格を合わせれば,同じ装置を 使うことができ,通常その容量(記憶することができる量)で区別します. 一台につき大きさは,最低40Mバイトから,数Gバイトまであります. フロッピディスクは,容量,形式もさまざまです.表1にその一覧を示します. フロッピディスクは,以下のような同心円の集まりで表現することができます.
\begin{itembox}[c]{図3}
\expandafter\ifx\csname graph\endcsname\relax \csname ne...
...%}%\par\vskip\parskip\centerline {\box\graph}\vskip\parskip\par\end{itembox}
各々の円(線)は,磁性帯によって情報を格納する溝を表します.この各円 を トラック(track)といいます.また,各トラックは,いくつかの セクタ (sector)に分けられます.このセクタ毎に,一定のバイト数 情報が格納されています. 両面使うことができます.よく,フロッピディスクに2DDとか,2HDなど と記載されていますが,この2は, 両面(double sided), Dは, 倍密度(double density),Hは, 高密度(hight density), 最後のDは, 倍トラック(double track)の意味です. フォーマット(format,区画化) の仕方が異なるので注意しましょう.以下に,最近使われている フロッピディスクのフォーマット形式を示します.
表 4 : フロッピディスクの容量
NO 媒体密度 byte/ sec/ tr/ 計算式 容量
    sec tr surface   バイト数
1 2DD 512 8 80 $512\times8\times80\times2$ 640$K$
2 2DD 512 9 80 $512\times9\times80\times2$ 720$K$
3 2HC 512 15 80 $512\times15\times80\times2$ 1200$K$
4 2HD 1024 8 77 $1024\times8\times77\times2$ 1232$K$
5 2HD 512 18 80 $512\times18\times80\times2$ 1440$K$
フロッピディスクの容量 例えば,代表的な4.の2HDのディスクについて説明します.1セクタ あたり1024バイト,1トラックに8セクタ,片面に77トラックあるので,
\begin{displaymath}1024\times8\times77 = 616K\end{displaymath}

となります.片面に616$K$バイト格納できます.両面使うことが できるので,
\begin{displaymath}616\times2 = 1232K\end{displaymath}

となり,全体で,約1.2Mバイト格納することができます.
平成17年1月25日