前に、「コンピュータは2進法の足し算しかできない」と述べましたが、
「実際の機械は、複雑な計算をしているではないか。どうして乗算が可能なの?」
などの疑問があるでしょう。乗算は加算をその回数行えばできますね。
減算はマイナス符号を付けて加算すればできますね。除算はもうおわかりですね。
何回除算ができたか回数を数えたらいいわけです。対数や自然数のべき乗(累乗)
など複雑な計算は、級数に展開し(高校の数学で学びましたでしょう?)加算で
こなすのです。
計算はわかった、でも、パソコンソフトのワードプロセッサは文字や図を扱って いるではないか?と思われるでしょう。確かにそうです、 少なくとも表面上はそうです。しかし、内部では、図を描くため、座標、色、 などを表示装置等の周辺機器に指示する場合、その装置の該当座標の各点 (画素:ピクセル)のon/off等の作動方法を2進法の加算に直した(コード変換した) 上で計算し、結果を我々が認識できるような形に変更表示なり印刷しているのです。 ここで、先程のべました、OSやソフトが重要に役割を果たすことになるのです。
ここで2進法そしてコードについて説明しましょう。2進法そのものは、 中学校で習いましたね。10進法が10で桁が繰り上がるのに対して、2進法は 2で桁が繰り上がるという方法です。因みに、2進法の桁をビット(bit)といいます。 数値に関しては、この2進法でなんとか表現できることはわかりますね。しかし、 この2進法は非常に原始的で、人間が使っている数字、文字を表すのには対比が 難しく、また理解もしにくいですね。そこで、これを塊にして扱い、その塊でもっ て必要な情報を表そうとしたのが、最小単位のコードです。上記の10進法との対 比で説明すると、2進法の桁で4桁、即ち4ビットで一応扱いやすい単位としての 大きさになります。具体的には、2の4乗は16であることから、 これでちょうど16進法の1桁に対応できる計算にますね。
もちろん、実際の応用に関しては、例えば数値の場合であれば、整数、 実数の扱い、負数の扱い等、解決すべき問題は多々あります。従って、それぞれの コンピュータ、あるいはソフトで、各種の制約(例えば、計算などを行う領域が 有限である等)のなかで、最適の機能が得られるように工夫されており、 計算可能な最大あるいは最小の数値が、それぞれに応じて規定されています。
復習のため10進法と対比して例を示しておきましょう。 一方、文字などは数が多いので、1コード4ビットでは1つのコードに1つの 文字を対応させるのは無理ですね。そこで8ビットで塊を作って表現します。 8ビットの表現は4ビット2つ分ですので、16進法の表記を2つ並べて表現 すればいいわけですね。8ビット使うと2の8乗個、即ち256個のコードが 得られますので、256種類の文字や記号が表現できます。現在普及している コンピュータの多くはこの8ビットコードを1つの単位にしており、 この単位をバイト(byte)と呼んでいます。
しかし、どの文字をどのコードに当てはめるか統一していないと混乱します。 実際、昔は混乱していたのです。そこで、現在では、主要な英数文字記号に加え、 コンピュータが内部で何かを機能させるために使用する信号も含めたコード体系 について標準化がなされ、それを情報交換用米国標準コード (アスキーコード,ASCII: American National Standard Code for Information Interchange)と呼んでいます。このアスキーコード体系は128個 について規定しています。日本工業規格(JIS)でも英数字記号に関しては原則とし てこれに従っておりますが、さらにカタカナコードを追加した256個のコード を規定しています。
次に示すのアスキー表から、アルファベットの小文字と大文字とは全く違った コードであることがわかりますね。従って、小文字と大文字がコンピュータに とっては全く別のものであることも理解できます。入力などの際には気を付けま しょう。また、小文字はそれが対応する大文字に比べ16進数コードでは20、 即ち10進数コードに直すと32だけ大きいコードを割り当ててあることがわか ります。この性質を利用すればプログラムで大文字から小文字に変更したり (コード番号を16進数で20進める)、その逆も可能なことがおわかりでしょう。
アスキー表(16進法で表示)の一部
コード 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
文 字 白 ! " # $ % & ' ( ) * + , - . /
コード 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
文 字 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
コード 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
文 字 @ A B C D E F G H I J K L M N O
コード 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
文 字 P Q R S T U V W X Y Z [ \ ] ^ _
コード 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
文 字 ` a b c d e f g h i j k l m n o
コード 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
文 字 p q r s t u v w x y z { | } ~ 削除
この表で、コード番号20は空白(スペース)の、そして7Fは削除機能の コードです。
では、文字数の多い日本語や中国語などの処理はどうなるのでしょうか。 高々256文字しか使えないようでは非実用的な文字言語をコンピュータで扱う場合 には、2バイトのコードを使用します。 2バイトのコードなら2の16乗=65,536文字、あるいは機能を表現できます。
残念ながら、1つのコンピュータ内に、先程の1バイトで表現される1バイト
コードと2バイトで表現される2バイトコードが存在することになり、コンピュータ
の内部処理は複雑になります。日本語文字コードの場合だけをみても、1バイト文字
との混乱を避けるため、同一の会社の製品でさえ、コード体系が、それぞれのシステ
ムに合せ複数存在していることも事実です。多国間の言語処理を考えた場合は、
もっと事態は深刻です。早く標準化してほしいですね。
本来、文字が何角かということと、その文字のバイト数とは無関係です。半角, 全角とは、単に文字の大きさの表現です。しかし、角数の多い漢字等の関係で、 表示装置上では2バイト文字の場合は、1バイト文字の2倍の大きさで表示されるの が普通でしたので、半角文字=1バイト文字,全角文字=2バイト文字の表現が、 便宜上、使用される場合もあります。先程述べましたように、人間の目には同じよ うに見えるアルファベットなどの文字が、コンピュータににとっては全く異質の、 1バイト文字の場合と2バイト文字の場合があり、混乱を引き起こす原因になります。 そこで、例えばパソコンなどでは、この混乱を避けるため、表示装置や入力装置上 などでは1バイト文字を半角で表示する場合が多いようです。
もうおわかりでしょうが、これはあくまで便宜上の表現であり、本来は
半角/全角文字と1バイト/2バイト文字とは関係ありません。実際、
多くのコンピュータシステムで、半角文字を指定するための2バイトコードと
いうものが存在します。