パソコンを使っているとデータの通信容量を巡る色々な問題に出くわします。
「ビットとバイトっておんなじ・・・だよね?」
「1ギガバイトはおよそ1,000メガバイト・・・正確には何メガバイトだっけ?」
こうした問を持ってしまうのは、そもそもパソコンデータのやり取りに使われている2進数の考え方をしっかりとできていない可能性があります。
今回も記事ではビットやバイトなどの用語を解説しながら、その背景にある2進数の考え方を説明します。
この記事を読めばデータ通信に関わる用語を芋づる式に理解できるでしょう。
ビット(Bit)って何?通信容量の最小単位を理解しよう!
私達のふだん使っているパソコンでは色々なことができますが、実は根本的な仕組みは"電卓"と変わりません。
パソコンはものすごく高速で計算を行える電卓のようなものであり、演算されたデータを人間が取り扱う形式にさらに変換して直感的に色々なことができるようになっているだけなのです。
パソコンには画像データ、テキストデータ、音楽データなど様々なデータがありますが、全てのデータは電気信号でやり取りされています。
では、電気信号とは何でしょうか。
電気信号とは"ON"と"OFF"の2つの状態を組み合わせて、復数の合図を伝えるものです。
例えば、オンオフの組み合わせを3つ使えば
ON・ON・ON
ON・OFF・ON
ON・OFF・OFF
ON・ON・OFF
OFF・ON・ON
OFF・OFF・ON
OFF・ON・OFF
OFF・OFF・OFF
8通りの合図を伝えることができます。
ON・ON・ON→右手を挙げて
ON・OFF・ON→左手を挙げて
ON・OFF・OFF→右足を挙げて
ON・ON・OFF→左足を挙げて
OFF・ON・ON→頭を抱えて
OFF・OFF・ON→ジャンプして
OFF・ON・OFF→しゃがみこんで
OFF・OFF・OFF→何もしないで
とルールを決めておけば
「ON・OFF・OFF」と合図を送るだけで「右足を挙げればいいのね」と理解できますよね。
こうした2つの状態を組みあせて合図を送るのが電気信号の仕組みです。
コンピュータは1と0の世界と言われることがありますが、
パソコンでは数字の"1"と"0"を組み合わせて電気信号を伝達しています。
「なんで1と0だけなの?1~9まで使えばいいじゃん・・・」と思う人もいるかも知れませんが、
パソコンも電気信号で動いているのでオンとオフの2つの状態しか表現できません。
ですからオンオフの状態を対応させた"1"と"0"の2つの数字を用いたやり取りになるのです。
この1と0を用いた数字の表現方法を2進数と呼びます。
ちなみに、私達のふだんの生活では0~9までの10個の数字を使った10進数による表現がされています。
この1-0の組み合わせ1つのことを1ビット(bit)と呼びます。
1ビットは、
1か0なので、2通りの表現が可能になります。
2ビットでは
00
01
10
11
の4通りの表現が可能になります。
3ビットでは、上記の通り8通りです。
ここで、規則性に気づきましたでしょうか。
仮に○ビットの電気信号を送った場合、表現できる組み合わせは2の○乗通りになるのです。
ですから10ビットの電気信号を用いれば、"1024通り"の組み合わせが表現できることになります。
これがビットです。意外と簡単ですよね。
バイト(bite)って何?ビットと同じじゃないの?
ビットと似た用語にバイト(bite)があります。
恐らく、1GBとメモリを表現するシーンが多いと思いますので
この"バイト"という単位の方が馴染み深い人も多いかもしれません。
ちなみにビットは小文字のb、バイトは大文字のBで表現します。
バイトとは、8ビットをひとまとまりにした単位です。
ですから、情報量は
1バイト=8ビット
2バイト=16ビット
という具合になります。
では、そもそもなぜ"8"ビットをひとまとまりにする必要があるのでしょうか?
別に2ビットでも10ビットでもいいんじゃないの?という疑問が生まれる人もいますよね。
1バイトは8ビットである理由は、パソコンが英語圏をルーツに発展した技術であることに起因します。
アルファベットは26文字ありますが、大文字と小文字の組み合わせやその他の記号を合わせると1ビットでは表現しきれません。
それが、8バイト=256通りあると英語圏で使用される表記を表すことができるので
1バイト=8ビットになっているのです。
つまり、1バイトは英語表記を一通り表現できる情報量ということですね。
ちなみに日本語は、ひらがな、カタカナ、漢字などを含めると1バイトでは表現できず
2バイト分の枠が必要になるのでマルチバイト文字と呼ばれます。
パケットって何?ビット・バイトとも違うのか
携帯電話を使用していると"パケット通信料"という言葉を耳にします。
パケットとはいったい何なのでしょうか?
実は、パケットも情報伝送の単位です。
1パケット=128バイトの情報量を持っています。
私達がパソコンでデータを送信する時、1つのファイルやデータは巨大な情報量を持ちます。
それらをいっぺんに送信すると、途中で回線が遮断された時にデータが途切れる恐れがあります。
そのため、実際の伝送においては1つの大きなファイルを無数の小さいデータに置き換えて送信し、受信先で再度つなぎ合わせる仕組みを利用しているのです。
この時に使われる情報の単位がパケットになります。
※もともと、パケットとは小包という意味です。
デジタルとアナログの違いって何?
鮮明な写真データも、心癒やす音楽データもすべて、もとは1と0のデータから復元されたものです。
実感としてはなかなか受け入れづらい人もいるかもしれませんね。
ビット、バイト、パケットのまとめとしてデジタルデータがどんなものかを簡単に説明しましょう。
まず、デジタルの写真・音楽・動画データとはどのようなものでしょうか。
1と0がどのように写真や音楽、動画になるのか分かりにくいですよね。
1と0がどうやって写真・音楽・動画になるの?
デジタルの写真は細かい点の集まりだと考えると分かりやすいと思います。
どこの点が青でどこの点が赤で・・・と細かく情報を与えてやれば非常に精巧な点描画のようになるので
人間の目には写真のように映ります。
色の表現方法は16万色以上ありますが、色の情報とドットの位置情報さえわかれば画像データを作り出すことができます。
デジタルの音楽データの場合はどうでしょうか。
実際の歌や演奏には、ボーカル、楽器など色々な音源が同時に音を発しています。
しかし、それらの音の波は合成されて耳に入るので
ある瞬間に耳が聞く音は、実は合成されたある特定の高さの音です。
ですから、どの瞬間(時間)にどれくらいの高さの音かの情報があれば人間の耳には連続した音楽として聞こえます。
これが動画になると、連続した画像データと音楽データを組み合わせればいいので
理屈は大して変わりません。
これらがデジタルコンテンツが1と0の数値で表現される仕組みです。
アナログは、例えば写真であればフィルムに直接、音楽であればテープに直接焼き付けることになります。
そのため、理論上はどんなに拡大しても細かい部分までみたり、聞いたりできる方法です。
そのかわり、フィルムやテープは経年劣化を起こしてしまうので、
保存状態に注意しないとデータが消失してしまうというデメリットがあります。
デジタルであれば、理論上データが失われることはありません。
写真や音楽、動画が1と0で表されているというのはとてもすごいことですよね。
これらはパソコンが超高性能な計算機のような働きによって支えられています。
つまりまとめると、以下のようになります。
・アナログデータ
レコード、カセットテープ、ビデオテープ、写真フィルム、アナログ電話、アナログ放送
音や映像、風景などを電気の波であるアナログ信号に変換して処理する。
アナログの電気信号をそのまま保存したものがアナログデータ。
音や映像をそのまま記録したもの。
媒体に焼き付けてそのまま保存したもの。(誤差が少ない
ただし、録音機器や再生機器に依存する。
光学写真フィルムはフィルムに焼き付いたデータを100%完全に再現できなかった。
外部のノイズの影響を受ける
経年や複製によって劣化する
アナログ放送は、山などの障害物で劣化して、放送が乱れる。
・デジタルデータ
パソコン、CD、DVD、MD、デジカメ、ISDN、デジタル放送
タイミングの音や位置の色の情報を記録している。
デジタルデータは数値のみで成り立っている。
編集や加工を得意とするコンピュータで読み取れる。
時間経過やコピーに関係しない。(厳密には完全に劣化がないワケではない。
計算機があれば処理できるのでコストが安い
デメリット
誤差が生じる
誤差を小さくするほど、データ量が増大し処理時間がかかる
--
元データの大きさ>実際の再生の質
元データ以上に大きくはできないってこういう仕組みだったのか。
超鮮明に見たり、聞いたりできるように、大容量で記録したかどうか
--
大容量保存はできても、再生機器がなければ対応できない。
Blu-rayはDVDの5倍のデータ量になる。
メガ・ギガ・テラって何?
画像、音楽、動画データなど巨大なデータを扱っていると
メガバイト、ギガバイト、テラバイトなど、色々な単位を耳にすることがあると思います。
最後にメガ、ギガ、テラについて解説します。
メガ・ギガ・テラは厳密には1000の倍数ではない
よく、1MB(メガバイト)=1,000KB(キロバイト)という説明を目にしますが、厳密には誤りです。
厳密には1MB=1024KBになります。
この関係はメガだけでなく、ギガやテラバイトにも当てはまります。
1KB=1,024B
1MB=1,024KB
1GB=1,024MB
1TB=1,024GB
正確には上記のような関係です。
では、なぜ1.024という中途半端な数字になってしまうのでしょうか。これは1Bが2進数であることに関係しています。
情報伝送の最小単位は1bitでオンとオフを表現していました。
1Biteは8bitでしたがこれは、256通りのパターンを表現できましたね。
2Biteでは16bitで65536通りのパターンを表現できることになります。
つまり、1,2,3とバイトが増えると、2の8乗、2の16乗とパターンが増えていきます。バイトもビットも元はすべては2の掛け算の数だけ表現できる情報量を持っているので、キロバイトもメガバイトもギガバイトもテラバイトもすべては2の○乗で表したほうがよいのです。そして2の10乗は1,024で、およそ1,000になるのでキロ、メガ、ギガ、テラなどは約1,000倍として表現されることが多いのです。
それぞれをバイトで表すと以下のようになります。
1KB(キロバイト)=1024バイト
1MB(メガバイト)=1024KB(約100万バイト)
1GB(ギガバイト)=1024MB(約10億バイト)
1TB(テラバイト)=1024GB(約1兆バイト)
1兆バイトとは途方もない情報量だと分かります。
情報量の増え方は2倍、4倍・・・
001 100
上記、2つの数字列は数字が違ってもどちらも3bitのデータです。
では3bitのデータと3bitのデータと合わせると何ビットになるでしょうか?
001100
と6桁の数字列になりますから6bitのデータになりますね。
これは3+3で6になると簡単に分かりますね。
ですがこの数字列のもつ情報量は"3"増えるわけではありません。
2進数、6桁の数字列で表現できるパターンは64通りなので2の3乗倍になっていることが分かります。
つまり情報量は1bit増えるごとに、その数字列の表現できるパターンが2倍、4倍、8倍と増えていくことになります。
これは、2進数の数字列をあわせる場合、どんな組み合わせでも同じです。
つまり、
"a"bit=2のa乗の情報量を持ちます。
1Bは8bitですので、
bB=8bbit
です。
また、8は2の3乗でもありますので
bを2の累乗であると定義します。
b=2のc乗
すると、
2のc乗B=2の(c+3)乗b
表現できます。
こうすると、
2B,4B,8B・・・
と感覚的にしか表現できなくなり
3B,5B,7Bなどを表現することができなくなるので、なぜわざわざこのように表現する必要があるのかと疑問に思われるかも知れません。
ですが、こうしないと不都合があるのです。
Bの係数を2の○乗と定めると
Bとbの関係が、"足し算"で簡単に表現できるようになります。
こうすることで、
1キロバイトが1バイトの"2の10乗"倍であるなら
1kB=2の10乗B
1kb=2の(○+10+3)bit
とこれまた和算で翻訳が可能になりますね?
これを利用すれば
メガもギガもテラも乗数の和算で簡単に翻訳できるのでとっても便利ですよね。
逆に、
Bの係数を2の○乗以外にも許してしまうと
例えば、
15Bと20Bのデータをあわせる場合の情報量をbitに変換する場合
15+20=35なので
35B=35×8bit
までは分かるのですが、
35×8の計算って難しいですよね。
ちょっとむずかしいけど、暗算でも計算できるかも知れません。
では以下の場合はどうでしょうか?
1267650600228229401496703205376B
と
1125899906842624B
を合わせると何Bになりますかとなると、
もうパニック状態になりますよね・・・・。
でも、実は上は2の100乗で、下は2の50乗なので
答えを○乗で表せれば
2の150乗 と表せば桁の多い数を簡単に表現できるようになるのです。
こうした自体を避けるためにも
bitやbiteの係数は必ず"2の○乗"の数で表します。
理由は、難しい計算を足し算で処理するためなのです。
でも、そうすると3とか5とかの情報量を持っていた場合に表現できなくなってしまうと思いませんか?
実は、そんなことはないのです。
2進数を使えば、全ての整数を2の○乗同士の和で表現できます。
2の0乗=1
2の1乗=2
2の2乗=4
なのですが、
2の3乗である8までの整数は
それまでの2の○乗の足し算で表現できるのです。
2の0乗=1→a
2の1乗=2→b
2の2乗=4→c
とすると、
3=a+b
5=a+c
6=b+c
7=a+b+c
となります。
これはどんなに大きな数でも適用できる2進数の不思議な性質です。
つまり2の○乗ではない大きな数字を想定した場合でも
6B=2の2乗B+2の1乗B
となりますので
8Bと6Bのデータをあわせる場合は分配法則を用いて
8B×6B=(2の3乗B×2の2乗B)+(2の3乗×2の1乗B)
=2の(3+2)乗B+2の(3+1)乗B
=2の5乗B+2の4乗B
=(32+16)B
=48B
となり8×6=48の答えと一致することが分かります。
この事実はつまり、Bの係数がどんなに複雑だとしても
係数を2進数の和で表現することで、どんなに大きな数でも最終的には簡単な計算に持ち込むことができるということです。
ポイントは、
どんな2進数の不思議な性質を使うことで
どんな大きな情報量のデータをあわせる場合でも
最終的に"2の○乗同士の和"に持ち込めるという点です。
2の○乗の一覧表と整数の対応表を作っておけば
巨大な整数Aと整数Bをあわせる場合でも
整数A→2進数に分解
整数B→2進数に分解
→分配法則で2進数の積同士の和に変換、
→2進数の積は対応表で、整数に変更
→最終的には整数同士の和 に変換することができます。
足し算の計算は簡単ですよね。
大きなる場合はキロ、メガ、ギガ、テラなどに変換できる部分は
それらの単位の部分だけ別に計算しておけば複雑な計算も必要ありません。
2のa乗TB=2の(a+10)乗GB=2の(a+20)乗MB=2の(a+30)乗KB=2の(a+40)乗B
となりますのでそれぞれの変換も容易です。
これらがキロ、メガ、ギガ、テラの関係が1,000倍ではなく
1,024倍=2の10乗倍でなければならない意味なのです。
こうした仕組みは、膨大な計算する必用があるコンピュータの世界で役立っています。
まとめ
いかがでしたか?デジタル、アナログの違いや情報伝送の単位はとても難解ですがそれぞれの関係性を理解すると覚えやすいと思います。これからは2進数をキーワードにして芋づる式に思い出せるようにしてみてください。