1章 コンピュータでのデータ表現   
    
1.1 アナログとディジタル
 コンピュータ内部では、データは1か0かという2進数で処理。この基本単位をビット(bit)と言う。コンピュータで扱うデータは、ディジタル・データです。ディジタル・データは不連続な変化をします。ディジタルに対する言葉にはアナログがあり、アナログ・データは連続的に変化しまず。
 体重計には、アナログ表示式とディジタル表示式があります。アナログ式の体重計では、目盛りと目盛りの間に針が位置した場合でも、たとえば「50kg弱で、49.7kgぐらい」と読み取ることができます。読み取れる範囲で、無限の精度があるということもできます。読み取りの精度は、最小目盛りと針の太さや、読み取る人の目と判断によります。
 ディジタル式の体重計では、目盛りと目盛りの間というようなことはなく、体重計に設定されている方法で四捨五入された値が数字で示されます。数字で示されるので読み取りのミスは少なくなりますが、それ以上の精度で体重を知ることはできません。たとえば「49.7kg」の場合でも、読み取り精度が0.5kgのディジタル式体重計では、四捨五入されて「49.5kg]と表示されてしまいます。
 
1.2 コンピュ−タはディジタル・データを扱う
 コンピュータでは、一般にディジタル・データを使用しています。アナログ・データの長所として微妙なところまで表現できるということはありますが、コンピュータには黒白のはっきりとしたディジタル・データのほうが扱いやすいからです。
 たとえば、0から3までの4つの数値を電気信号で表現するとしましょう。乾電池を使えば、電圧の0V(=0)、1.5V(=1)、3V(=2)、4.5V(=3)というように対応させることができます。しかし、電池の場合は新品のため規格以外の電圧が得られたり、逆に電池が摩耗していたり電線が長かったりして、規格以下の電圧しか得られないことがあります。つまり、1.5Vや3Vといったぴったりの電圧が供給されなくなってしまうのです。電圧が2.25Vになったときなど、1.5V(=1)のつもりが高すぎるのか、3V(=2)のつもりが低すぎるのか、判定しにくくなります。
 そこで、図1のように3個の乾電池に3台の電圧計を用いると、同じ0から3までの4つの数値を、ディジタルの電気信号で表現できるようになります。つまり、電圧計の針がすべて0V(針が振れない)を指していると数値は「0」、1台が1.5Vを指して2台は0Vなら数値は「1」、2台が1.5Vを指して1台は0Vなら数偵は「2」、3台とも1.5Vを指したら数値は「3」と決めておけば、数値を筒単に表現することができます。乾電池の電圧が低下して、たとえ、1Vになっても針は振れるので、何台の電圧計の針が振れたかということで数値を読み取ることができます。別の考えかたをすると、スイッチがオンかオフかでデータを表現できるわけです。
 データは単純なほうが機械にとって判別しやすいので、なるべく単純なデータをたくさん集めて何かを表現しようというのが、ディジタル式のコンピュータの基本的な考え方です。



(a)

(b)
図1 乾電池と数値の対応
 
 電池の電圧はどの程度正しく伝えられるかを調べるために、乾電池1.5Vを1kmの長さの電線でつなぎ、先端での電圧を測定する。ノイズの影響で変動する。このように電圧で対応させると、種々の原因で正確に伝わらない。そこで、ディジタルICでは図2のように定めている。C-MOS ICの場合、電源電圧VDDのとき、0〜VDD/3の範囲の時、ディジタル値 0、2VDD/3〜VDDのとき、ディジタル値 1と決める。TTL ICの場合は0〜0.4Vの範囲の時、ディジタル値 0、2.4V〜5Vのとき、ディジタル値 1と決める。
 


図2 電圧とディジタル量の対応 C-MOSとTTLの場合
  
アナログICとディジタルIC
ICの中身は、トランジスタ、FETとダイオードの半導体から成る。アナログ信号とディジタル信号の相違は連続した信号かパルス的な信号か異なる。



図3 アナログICによる信号の増幅
 
ディジタルICによる論理回路
 図のように、クロックで決まるパルス(1 or 0)でディジタル量が表される。



図4 ディジタルICによる論理回路
 
 TTLのICでは、7ビットのディジタル信号 1001011 のデータの場合、図5のようにパルス状の波形で表される。このパルスが、クロック信号に合わせて伝送されます。
 


図5 ディジタル信号 1001011 のデータの場合
クロック信号に合わせて伝送
 
フリップフロップ回路、ディジタル信号、1、0の保持(記憶)


 
図6 フリップフロップ回路、ディジタル信号、1、0の保持(記憶)
 
1.3 10進法と2進法
 10種類のデータを表現するには、10個のスイッチと10個の電球があればいい、と単純に考えることができます。しかし、この考え方では、必要なデータの数だけスイッチや電球を用意しなければなりません。そこで人間は、少ない数で多くのデータを表現できる方法をいろいろ考えてきました。われわれは、日常的に数をかぞえるときに、10進法を使っています。 10進法では0から9までの10種類の数字を用い、0〜9は1個の数字で、10〜99は2個の数字で、100〜999は3個の数字で表現します。
 9に1を加えると10になります。このように、1個の数字から2個目の数字が必要になることを「桁上がり」といいます。当然ですが、桁上がりを利用することで、無限の数を表現できるわけです。
 コンピュータの世界では、2進法が使われています。2進法では、0と1の2個の数字しか用いません。たった2個の数字でも同じように桁上がりを利用することで、多くのデータが扱えます。人間の目や思考には10進法が慣れていますが、コンピュータでは少ない種類のデータを多数集めて処理するという発想から、2進法が用いられているのです。 2進数をコンピュータで表現するときは、0をスイッチのオフに、1をオンに対応させます。すなわち、電流が流れているかいないかによって、2つの数を区別するわけです。ただし、実際には電圧の高低を電流の有無に置き換えています。

2進数と10進数の変換
 2進法で表現される数値を2進数、10進法で表現される数値を10進数といい、2進法における「2」、10進法における「10」を「基数」と呼びます。コンピユータの世界では、2の4乗である16を基数とした16進法もよく使われます。 16進数は、2進数の4桁を文字で表せるので、読みにくく間違いやすい2進数を置き換えて表現するのに便利です。16進数では数字が16種類必要なので、0から9までの算用数字に加え、A、B、C、D、E、Fの6つのアルファベットを10進数の10〜15に対応する数字として用います。
 2進数、10進数、16進数などの数値の表現力法を、記数法と呼びます。各記数法は、別図のようにそれぞれ相互に変換できます。コンピュータ内部で数値や文字は、後述するように2進数のコードで扱われますが、この場合は必ずしも別図の変換方法ではなく、なんらかの形で対応する2進数に変換されます。
 
表1 10進数,2進数,16進数の関係


10進数 4321は次のようになっています。

     4321 = 4×103 + 3×102 + 2×101 + 1×100 =4000 + 300 + 20 + 1 = 4321
  従って、2進数の場合は、基数が2になり、16進数の場合は基数が16になります。
 
2進数[1101 1101]を10進数に変換
  1×27 + 1×26 + 0×25 + 1×24 + 1×23 + 1×22 + 0×22 + 1×20 = 128 + 64 + 0 + 16 + 8 + 4 + 0 + 1
    = 221
(a) 2進数から10進数に変換
10進数から2進数に変換


(b) 10進数から2進数に変換
 
2進数から16進数に変換



(c) 2進数から16進数に変換
図7 2進数、10進数、16進数の変換例
  
2進数の演算
 2進数では、10進数と同じように四則演算が行えます。ただし、コンピュータでは加算が基本で、減算などは後述するように数値の表現方法を変えて、加算の形で行われます。
 加算を行うとき、10進数の場合は0から9までの1桁数字を相互に組み合わせますから55通りのパターンがあるのに対して、2進数では次の3通りしかありません。
  0 + 0 = 0  0 + 1 = 1 + 0 = 1  1 + 1 = 10
 2進数の桁上がりは、1と1を足した場合にだけ起こります。原理は10進数の場合と同じですが、より単純になっているわけです。
1.4 文字の表現
ビツト(bit)とバイト(byte)
 ディジタルという言葉は、ラテン語の指(digit)という意味からきています。“指折り数える”ということは、ディジタルな動作なのです。片手の指5本で、いくつまでの数値が扱えるかを考えてみましょう。指1本で表現できる状態は、折る(1)、折らない(0)の2つです。これを1桁に対応させると、5本の指では2進数で00000〜11111、10進数では2の5乗で32個、すなわち0〜31が表現できます。

 *最近、「デジタル」と言う言い方がはやっていますが、ラテン語の指(digit)という意味からきていますので、和製英語の呼び方です。


図8  指とビット
  
 このときの1本の指のことを、1ビット(bit)といます。片手では、5ビットです。 コンピュータでは、8bitとか16bit,32bitといった用語が出てきます。ビットとは2進数の1桁のことで、10進数にするとn bitなら2のn乗、2nの種類が表現できることになります。
 コンピュータは、内部ではビット単位の2進数のデータで動作していますが、人間の使っている文字などの扱いでは、2進数(1ビット)の8桁、つまり8ビットを1つのまとまりとして最小単位にしていまず。これを『バイト(byte)』といいます。
 英語では、文字の表現にアルファベットが使われます。使用され文字数は、

   ◎アルファベット大文字と小文字で52文字、
   ◎数字が10文字、
   ◎記号が30個ぐらいで合計100種類程度です。 

これに、空白(スペース)や改行、タブ(数桁ぶんの空白を意味する記号)、コンピュータを制御するための記号などを加えても、合計で7ビット(27=128種類)あれば、すべてを表現することができます。そこでアメリカなどでは、この7ビットに予備あるいはデータ伝送のときに誤りをチェックするための1ビットを加えた8ビットが、コンピュータのデータの最小単位として規定されています.たとえば大文字のAは、「0100001」と言う具合です。
 日本では、これらの英数字や記号に独自のカタカナを加え、半角文字を8ビット(28=256種類)で表現しています。
 このように、コンピュータでは8ビット(1バイト)が重要な単位となっています。初期のパソコンが8ビット・パソコンと呼ばれたのは、一度に処理できるデータが8ビット、すなわち1文字ということだったのです。 キーボードから直接入力できる8ビットの半角文字を、1バイト文字と呼びます。
 1バイト文字などのコード(キャラクタ・コード)つまり文字番号は、『ASCII(American Standard Code for Information Interchange)』や『JIS(日本工業規格)』で定められていて、それぞれ『ASCIIコード』や『JISコード』と呼ばれます。

日本語文字は2バイト文字
 日本語を表記するには、主に漢字やひらがなが用いられます。カタカナだけで書かれた文章は、読みにくくて実用的ではありません。漢字は数万種類あるともいわれますが、日常的に用いられるのは常用漢字(文部省が定める1945文字)の数倍程度でしょう。そこで『JIS漢字コード』では、6353文字のコードがまず規定されました。
 JIS漢字コ一ドの6353文字は、よく使われる漢字である『第1水準(2965文字)』と、それほどは使われない漢字ある『第2水準(3388文字)』の2種類に分類されます。だだ、行政や金融、印刷などの分野ではこれでも不足するため、新たに人名や地名などで使われる漠字が追加されました。これを、補助漢字または『第3水準』といいます。
表2 キャラクタ・コード表とコードの求め方


  
 K(キロ)バイト、M(メガ)バイト、G(ギガ)バイト,T(テラ)バイト
 バイトは、コンピュータの記憶装置の要領を表す単位としても用いられます。ただ、記憶億装置の容量は何十万、何百万バイトにもなるので、長さの単位であるキロメートル(km)と同じように、大きな数字は「K」などの接頭語をつけて表現します。 kmやkgの「k]は1000を意味しますが、コンピュータの世界ではキロを2の10乗すなわち1024としています。長さや重さと区別するために大文字を用い、「KB」などと表記します 1 KB(1Kバイト)なら1024バイトですから、単純計算では1バイト文字なら、1024文字分、漢字なら512文字分の容量ということになります。

表 3  Kバイト、Mバイト、Gバイト、Tバイトの値


*この原稿は「基礎情報科学」の科目を担当した時の、講義ノートと資料の一部です。