コンピュータは0と1からなるデータしか扱えない。 しかし,現実のデータは10進数だったり,小数だったり,文字だったり, はたまた音や静止画や動画だったりする。 これらのコンピュータ内での2進表現をコード(code)と言い, 2進表現に変換することをコーディング(coding)と言う。 逆に2進表現から現実的なデータにすることをデコーディング(decoding)と言う。 とは言っても, コンピュータの出力機器はディジタルのデータを直接受け取ることのできるものが多いので, デコーディングの作業は音声データぐらいしか行われない。
本章では,ほとんどの議論を2進表現されたコードで表現するが, 長いものになると,0と1の羅列になり必ずしも読みやすいものではない。 このため,2進表現を4個ずつまとめた16進表現(hexadecimal representation)もしばしば利用される。 2進表現の00006.1から1111を0から15と表現しようというものである。 ただ10以上は2桁で記載するのは,見づらいので,アルファベットを使う。 10はA,11はB,12はC,13はD,14はE, 15はFと表記する 6.2。 こうすると0000 0000から1111 1111は, 00からFFと表現されることになる。 13などと書かれたときに, 10進表現(decimal representation)の13なのか16進表現の13(10進表現では16+3=19) かの区別が付かなくなるので,16進表現では, 頭に0x(またはx)を付けて, 0x13などのように表現することにしよう。 0xFFは255,0x100は256となる。
2進表現は通常圧倒的に桁が多いので10進や16進とは区別しやすいが, 混乱を招きやすいときには必要に応じその旨記載する。
コンピュータで扱うデータは図 6.1に示すように, 数,文字,文字の集合である文字列, 画像,音声,映像といったさまざまな対象を処理する。 基本的には入出力装置があれば,何でも扱える。 しかし,そもそもの基本となったのは数と文字である。 本章はこの数と文字の内部における表現と,その扱い方について学ぶ。
第1章でも簡単に述べたが,ビット(bit)という概念がある。
元々は通信の際の情報量を表す単位であるが,
0または1で2状態のいずれかを通信できるので1bit,
0または1を2組用意すれば00,01,10,11の四つの状態を通信できるが,
これで2bit,以下0または1を
組用意すれば
個の状態を通信でき,
それが
bitということになる。
通信の世界ではもう少し厳密に定義されていて,各状態の生起確率にも依存するが,
ディジタルの世界では,簡単に0または1を送るための線の本数と理解してよいだろう。
数を例にして言うと,bitとは2進表現された場合の桁数のことを指す。
1bitあると,0または1の二つの数を表現することができる。
2bitあると,00,01,10,11の四つの数を表現できることになる。
さらに一般に
bitあると,0...00,0...01,...,1...11と
個の数を表現することができる。
また,必要に応じ,負数を含む正負整数を表現することもできるが,
それについては以後の節を読んで欲しい。
文字を処理する場合も同様で,コンピュータの内部では0,1の集合で処理されるが,
集合のサイズが
個あると
個の文字を区別することができる。
この集合のサイズもビットと言うので,
bitあると
個の文字を区別して処理することができると言ってよい。
例えば,英数字の文字数を表すのに必要なビット幅(英語大文字小文字で26の2倍,
数字で10,これに若干の記号を入れて64を少し越える)ということで,
7bitあれば十分であるが,切りのよい数(コンピュータの世界では,2,4,8,16,
...)6.3ということで
8bitを使って英数字を表現していると言ってもよいだろう。
英小文字の「A」は0x41である。
もちろん,これは8bitで文字の形まで表現している訳ではない。 文章処理のような場合, 文字をそのままの形で蓄積するより, 対応コードで蓄積する方が遥かにコンパクトであるし, 間違いも少ないからである。
コンピュータはこうした数や文字を表すのに必要な情報を一挙に並列に入力したり, 出力したりして処理を行う6.4。 こうした数や文字などを転送する場合の並列のビット数をビット幅(bit width), あるいは単に幅(width)とも言う。 平行な配線の線数と思ってよいだろう。 数や文字のようなデータを送受する線の幅はデータ幅(data width)とも言う。 これ以外にも,メモリーのアドレスを指定する線の場合のアドレス幅(address width)もある。
数を処理するには,大きな数まで取り扱えるよう,幅は広いほどよさそうであるが, 広ければ広いなりに,集積回路の面積を多く使う。 このため,適切な幅がある。 文字を扱うには,8bitや16bitの幅が便利である。 このため,多くのコンピュータのデータ幅は8,16,32bitというものが多い。
なお,単に0x41というと,文字ならば「A」であるし, 整数ならば10進表現で65(2進数0100 0001)を指す。 いずれなのであろうか。 実は,これらデータを扱っているプログラムが心得ているのである。 日本語の「ー」が音引きなのか1なのかが, 前後の文脈がないと理解できないのと同じようなことである。