日本語情報処理に関して強くなりたいので、調べて理解したことと、まだ理解できていないことを日記に書いていきます。・・・。と、おもって書き出したらなんだかコンピューター入門みたいな感じになってしまいました。まぁ、これはこれで良いことにします。。。。
どのようにしてコンピューターで文字を表現するか
コンピュータは1,0の世界だとよく言われます。ONかOFFか。デジタル表現である、と。それはそうなんでしょうけれども、ではそれだけでいったいどのようにしてこれだけ文字も画像も音声も動画も表現できているのか?「きっと偉い人がいろいろなことを考え出してうまいことやってくれているんだろう。」と、それだけの理解で終わってしまうのはもったいないので、まずは文字に関して考えてみます。
上にも書きましたが、コンピュータの世界では1,0で情報をすべて管理しています。これを『ビット』と呼びます。つまり1ビットあれば0と1の2つのパターンを表現することができるわけです。ここでは文字のことを考えているので、たとえば以下のようなルールを考えてみます。
- ルール0:1ビット=1文字
- ルール1:0に対応する文字として「あ」を設定する
- ルール2:1に対応する文字として「い」を設定する
このようなルールを設定した上で、以下のビットの並びを文字列に変換して読んでみてください。
- 01000111
どうでしょうか。できましたでしょうか。正解は「あいあああいいい」です。でも、さすがに2文字しか使えないとまともに使えませんね。1ビットで表現できるのは2パターンだけなので、1ビットを1文字に対応させている限りはこのレベルまでしかがんばれなさそうです。それではどうすればもうちょっと使える文字数を増やせるでしょうか?
そうですね、1ビット=1文字というルールを変更するしかなさそうです。それでは2ビット=1文字というようにルールを変更しましょう。2ビットあれば00,01,10,11の4パターンが作れますので、文字は4文字使えます。
- ルール0:1ビット=1文字
- ルール1:00に対応する文字として「あ」を設定する
- ルール2:01に対応する文字として「い」を設定する
- ルール3:10に対応する文字として「う」を設定する
- ルール4:11に対応する文字として「え」を設定する
このようにルールを変更した上で、以下のビットの並びを文字列に変換して読んでみてください。
- 10110001
さて今度はどうでしょうか。正解は「うえあい」です。意味はありません。1ビット=1文字というルールを2ビット=1文字と変更することで0と1の組み合わせで4文字まで表現できることが理解できたでしょうか。どうやらこの調子で1文字あたりに割り当てるビット数を増やして行けばどんどん使える文字を増やしていけそうです。
それではひらがなの50音をすべてルールに乗せるためには、1文字あたりのビット数はいくつ必要でしょうか?数学が得意な人なら簡単だとは思いますけれども、1ビットで表現できるパターンは2パターンなので、1ビット増やすごとにパターンは倍にしていくことができます。1ビットで2パターン。2ビットで4パターン。3ビットで8パターン。4ビットで16パターン。5ビットで32パターン。6ビットで64パターン。どうやら6ビットあればよさそうです。それでは以下のようにルールを変更しましょう。
- ルール0:6ビット=1文字
- ルール1:000000に対応する文字として「あ」を設定する
- ルール2:000001に対応する文字として「い」を設定する
- ルール3:000010に対応する文字として「う」を設定する
- ルール4:000011に対応する文字として「え」を設定する
- ルール5:000100に対応する文字として「お」を設定する
- ルール6:000101に対応する文字として「か」を設定する
- ルール7:000110に対応する文字として「き」を設定する
- ルール8:000111に対応する文字として「く」を設定する
- ルール9:001000に対応する文字として「け」を設定する
- ルール10:001001に対応する文字として「こ」を設定する
- (以下省略)
それではこれでもうひらがなは全部使えることになりました。以下のビットの並びを文字列に変換して読んでみてください。
- 000000001011
どうでしょうか?わかりましたか?12ビットしかないので、2文字ですね。はじめの6ビットはすべて0なので「あ」。次の6ビットは「001011」なので「し」です。つまり「あし」でした。つまらない例題ですみません・・・。でも、これで50音は表現できていることがわかりましたでしょうか?
でも、ちょっとまってくれという声が聞こえてきそうです。日本語には濁点、半濁点もあれば促音などもあります。さらにいえばカタカナだってあるし、漢字なんてそれこそ大量にあります。それはどうするの?と。
気持ちはわかりますが、まずはスロースタートでいきましょう。ここでは以下のことだけ把握して次に進んでもらいたいと思います。
- コンピュータの内部では1,0ですべての情報が処理されている
- 1,0を表現する最小単位をビットと呼ぶ
- 勝手にルールをつくれば文字はビットで表現できる
- 1文字に割り当てるビット数を増やしていけば多くの文字を扱うことができそうだ
ASCIIコード
なんだかどんどんビット数を割り当てて行けば色々な文字を扱うことができそうな気持ちになってもらったところで、まずはいったん日本語からはなれます。アルファベットです。コンピュータは英語圏で生まれたものですし、アルファベットは文字数が日本語に比べるとはるかに少ないのでまずはアルファベットを扱うものから見ていきます。で、アルファベットを対象にしたルールがあれば表現できそうですよね?このルールと今まで読んでいたものは正式には「文字コード」と呼びます。それではアルファベットを対象にした文字コードを見てみましょう。
アルファベットを対象にした文字コードで一番有名で広く使われているものはASCIIコードです。ASCII文字セット(ASCIIコードで使われる文字のセット)は128文字で構成されています。印字可能文字は94文字で残りの34文字は空白文字と制御文字(タブ、エスケープ、SI等の制御に必要なもの)です。以下、印字可能94文字の一覧と文字コードを示します。
{{image 0, ‘ASCIIコード’}}
背景色が青になっている部分が印字可能な94文字になっています。とりあえずこの背景色が青になっているところだけに中目して見てください。つまり今までと同じようなルールの書き方でいうと以下のようになっているのです。
- ルール0:8ビット=1文字
- ルール1:01100001に対応する文字として「a」を設定する
- ルール2:01100010に対応する文字として「b」を設定する
- ルール3:01100011に対応する文字として「c」を設定する
- (以下省略)
aを定義しているのはルール1ではないだろうという突っ込みもあるかと思いますが、そこはご容赦下さい・・・。今まで考えてきたことと同じように考えを拡張することで対応可能だということが理解してもらえたのではないかと思います。
英語圏でのみ暮らしている人はとりあえす文字コードに関してはASCIIコードのみを知っていればおそらく生活できてしまうのだと思います。かなりうらやましいですね・・・。とりあえずその1はここまで。もしかしたら続くかもしれません。
コメント