4.2 情報量
先週のls コマンド(l オプション)の結果をもう一度見てみましょう.
% ls -l total 1304 drwx------ 9 s03000hf student 512 4/20 15:46 Mail/ drwx------ 2 s03000hf student 512 4/ 8 18:01 WAppCNS/ drwx------ 2 s03000hf student 512 4/ 2 20:36 WAppNMC/ drwx------ 11 s03000hf student 512 4/ 8 18:01 WDataCNS/ drwx------ 6 s03000hf student 512 4/12 12:59 WDataNMC/ drwx------ 4 s03000hf student 512 4/12 12:08 Wnn/ drwxrwxrwx 3 s03000hf student 512 4/18 15:54 Wnn6/ drwx------ 2 s03000hf student 512 4/ 8 18:01 XPAppCNS/ drwx------ 15 s03000hf student 512 4/18 09:32 XPDataCNS/ -rw-r--r-- 1 s03000hf student 204 4/18 11:12 test -rw-r--r-- 1 s03000hf student 204 4/18 11:12 test2 drwxr-xr-x 2 s03000hf student 512 4/11 11:18 tmp/ |
それぞれのファイルの日付の前についている数字がそのファイルの情報量であると説明しましたが,この情報量とは何なのでしょうか.
コンピュータ(Digital Computer)は数値(digit)を処理します.従ってコンピュータ上で扱われる文字や画像,音声といった情報は全て数値として表現されています.
試しにtestというファイルがどのように数値で表されているか見てみましょう.
% od test 0000000 015444 041073 062044 047472 071106 076111 041061 020444 0000020 045471 052044 041444 037441 021433 024102 005033 022102 0000040 046573 022142 042555 022142 042555 022116 022046 022101 0000060 020443 015450 041012 015444 041104 066444 045444 047445 0000100 045461 024467 056044 026044 022044 065441 021433 024102 0000120 005033 022102 032456 036122 022116 032455 036124 022054 0000140 032445 036126 022107 032442 036122 022067 022077 020443 0000160 015450 041012 015444 041044 031444 031444 043515 075112 0000200 025044 071103 023044 022044 043462 036044 032444 022041 0000220 021433 024102 0000224 |
情報を数値で表すと,その分量を量ることができます.この分量を情報量と言います.ここでは情報量の概念と情報量の単位(ビット,バイト)について説明します.
情報量
コンピュータ内で表される数字や文字,画像などの情報は,必ず量を持っています.「このファイルは3メガバイトもある」と言った時,3メガバイトという表現は,バイトという単位による情報の量,すなわち情報量を表しています.では一体,情報量とはどのような概念なのでしょうか.
表が黒,裏が白色のカードを使って,天気を現すことを考えてみましょう.もし今このカードが1枚しかなかった時,表か裏の2通りしか表せないので,「雨」か「雨でない」かしか表現できません.
もし,カードが2枚あれば晴れ,雨,曇,雪といったように4つの天候を,3枚あれば8通りの天候を表すことができます(図1).
図1 カード3枚による天気の表現
このカードを図2のように並べると,図形を表すこともできます.
図2 25枚のカードによる画像表現
さて,1枚のカードは2つの天候しか表すことができないのに対して,2枚のカードは4つの天候を表すことができます.これは1枚のカードよりも2枚のカードの方が表すことのできる情報の量が大きいということを意味しています.3枚のカードは8つの天候を区別し,表すことができるので,2枚のカードよりも更に情報量は大きいということができます.このように,情報量とは
何種類の情報を区別することができるかを示す量
を意味しています.当然,1枚のカードより3枚のカードの方が区別することのできる情報の数が多く,情報量は大きいと言えます.
情報量の単位として用いられるのがビット(語源は2進法の1桁を意味するBinary Digit)といわれるもので,1枚のカードや1枚のコインのように,2つのものを区別することができます.これを1ビットの情報量を持つといいます.表が黒,裏が白の3枚のカードを並べると8つのものを区別することができます(図1).この3枚のカードによる情報の表現は,情報量として3ビットを持つことになります.同様に図2のように 25枚のカードを並べた画像表現は,25ビットの情報量をもちます(すなわち,2の25乗通りの異なるものを区別できるということです).
情報量と2進数
コンピュータでは,全ての情報はコインやカードの表裏のかわりに1か0(電気信号のONかOFFに対応します)の2進数によって表現されます.先ほどのカードの表,裏を2進数の1,0に置き換え,8つの天候を0から7までの10進数(私たちが日常使っている数字記法です)に置き換えると,次のように対応づけることが出来ます(下表).
2進数 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 |
---|---|---|---|---|---|---|---|---|
10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2進法
ここで,2進法と呼ばれる数字記法について説明をします.普段我々が日常生活で使用している数の表し方は,10進位取り記法(以下10進法)と呼ばれる体系です.10進法を用いると,1桁で10個の別々のものを区別することができます.例えば,0は赤,1は青,2は緑・・・といった具合です.11個以上のものを区別するためには,桁を増やすことによって対応します.
さて,人間と違いコンピュータは2進法という表記体系を用いています.10進法に慣れ親しんだ我々からすると非常に変わった体系に思われますが,コンピュータにとっては非常に都合のよい体系なのです.10進法においては0から9までの10種類の記号がありますが,2進法には0と1の2種類しか記号が存在しません.つまり,2進法では1桁で2種類のものしか区別することができないのです.例えば,0が男,1が女,若しくは0が偽,1が真といった具合です.3つ以上のものを区別しようとすると,桁を増やす必要があります(2進法は2の累乗で桁上がりを起こします).
例えば8個のものを区別しようとする際に,10進法では1桁しか必要ないのに対し,2進数では3桁必要となります.また,256個のものを区別するのに,10進法では3桁(0〜999)あれば十分なのに対して,2進法では8桁(0〜11111111)も必要となります.10進法のように使う記号を増やせば桁は少なくなり,2進法のように使う記号を少なくすれば桁が増えます.電気回路であるコンピュータにとっては2進法の方が都合が良いのです.電気信号には雑音があるので,ONかOFFの2通りの状態しか考えないことにすれば,雑音に強い情報を表すことができます.詳しくは →10.4 アナログ情報とデジタル情報を参照してください.
さて,8個の数を区別することのできる2進数表現(すなわち,3桁の2進数)は何ビットの情報量をもつといえるでしょうか.2つのものを区別できるもの(例えば,1枚のコイン,1枚のカード)は情報量として1ビットをもつのでした.2進数において1枚のコインの「枚」にあたるのは,桁数であるといえます.1桁の2進数ならば,1か0という2つの状態の区別ができるので(カードで言えば表裏の区別ができるということです),1ビットの情報量をもちます.同様に,2桁の2進数ならば,11,10,01,00 という4つの情報を区別できるので,コインやカードで言えば2枚,すなわち2ビットの情報量をもつといえます.8個の数を区別することのできる2進数表現は3桁なので,情報量として3ビットを持つと言えます.
一般に,(2進法は2の累乗で桁が増えるので)2進法ではN個のものを区別するためにLog2・N桁,すなわちLog2・Nビット必要であるといえます(a,Bを自然数とした時,Log a・Bは,aを何乗したらBになるかを表しています.例えば,Log2・8=3です).下の表は,0からNまでの自然数を区別しようとする時,何ビットの情報が必要であるかを表したものです(Nは2進数及び10進数で表記しています).
2進数 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 |
---|---|---|---|---|---|---|---|---|
10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
必要なビット | 1 | 1 | 2 | 2 | 3 | 3 | 3 | 3 |
16進法
コンピュータは2進法によって様々な情報を扱います.情報を表すために使用されている0と1の列のことをビット列といいます.しかし,2進数で情報を表す場合,2進法では2の累乗で桁上がりを起こすために,情報量が増えると桁数もそれにつれて増えていきます.桁数が増えすぎると読みにくいため,2進数のビット列を4桁ごとに区切って表現することがあります.このとき,4桁の2進数を16進数で表します.
16進数による表現は色の指定(→7.5 スタイルシート)や,文字コード(→10.5 文字コード)で使用されています.
10進数 | 2進数 | 16進数 |
---|---|---|
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16進数は16の累乗で桁上がりを起こしますが,0から9までの10個の数だけでは不足なので,これに加えてA〜Fの6個の英大文字を使って数を表しています.そのため,10進法の10は16進法のA,10進法の15は16進法のFとなります.16進数の位取りの考え方は次のようになっています.
16進法における位取りの考え方
2進数と16進数の変換
2進法と16進法の相互変換は次のように簡単に行うことができます.たとえば,2進法の10011100110を16進数にする場合,以下の手順で変換します.
- 与えられた2進数を,下の位から順に4つずつのグループに分ける.→100 1110 0110
- 各グループを,対応表を基に16進数で置き換える.100→4 1110→E 0110→6
- 答え4E6
16進数から2進数に変換するには,逆の操作を行います.
情報量の単位
情報量の単位としては,上で説明したビット以外にもバイトという単位がよく使われます.256個の情報を区別するためにはLog2・256=8ビット必要で,これを1バイトと呼ぶことになっています.さらに,1,024バイト(約1,000バイト)を1キロ(1KB)バイト,1,048,576バイト(約1,000キロバイト)を1メガバイト(1MB),1,073,741,824バイト(約1,000MB)を1ギガバイト(1GB)と呼びます.「このファイルは3メガバイトもある」という表現は,「このファイルは3メガバイト=3,000キロバイト=3,000,000バイト=24,000,000ビットの情報量を持つ」ということを意味しています.そして,24,000,000ビットの情報量をもつとは,2の24,000,000乗個のものを区別できるということを意味しています.
● 練習問題
- 5桁(00000から11111まで)の2進数はいくつのものを区別することができるでしょうか.
- 慶應には,法・文・経済・商・理工・医学・総合政策・環境情報・看護医療の9学部が存在します.自分の所属学部を表すとすると情報量は何ビット必要になりますか.
- 表が白,裏が黒のカード64枚を平面上に配置することによって表される画像の情報量は何ビットになるでしょうか.
- 2進法の101101を16進法で書き直すとどうなるでしょうか.
- 3メガバイトのファイルをダウンロードするとします.ダウンロードのスピードは,平均して1秒間に5キロビット(5Kbps)であるとします.この時,ダウンロードにかかる時間はおよそどれくらいでしょうか?計算してみましょう.