PC等を使っていると、ビットやバイトという単位がよく出てきます。
ビットやバイトは何かというと、データの単位で、
メモリーやディスクの容量なんかを表す場合に使います。
ではビットとバイトの違いは何か?
大雑把に言うと、バイトはビットの集合です。
ビットとは?
まずビットについてですが、ビットというのはデータの最小単位です。
コンピュータはデータを電気信号として処理していますが、電気信号で
情報を表す場合、オンかオフかの2通りしかありません。
例えばこれを数字で表す場合0をオフ、1をオンとしたとします。
この場合、表される数字は0と1の2パターンです。
この単位をビットといいます。
じゃあビットで「2」を表す場合はどうすればいいか?
もうひとつビットを追加して2桁で表せばよいと言う事になります。
ようするにこうなります → 0は00 1は01 2は10
ビットが2つ集まったので2ビットという単位になります。
また、ビットのように0と1の2つの数字だけでの表現方法を「2進数」と言います。
我々が普段から使っている数字は0~9までの10通りの数字を使いますので「10進数」です。
○進数の○の部分を基数といい、例えば2進数を10進数で表記する場合、
基数が2から10に変わるため「基数変換」などと言ったりする事もあります。
ただ、このままでは使いづらいので以下のように対応表を作ると少しわかりやすくなります
コンピュータでよく使われているものは以下の4種類です。
2進数 | 8進数 | 10進数 | 16進数 |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 |
11 | 3 | 3 | 3 |
100 | 4 | 4 | 4 |
101 | 5 | 5 | 5 |
110 | 6 | 6 | 6 |
111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |
このように表現できる数字が足りなくなったら桁が繰り上がるのは
我々が使っている10進数でも同じです。
16進数に至っては数字が足りないのでアルファベットで表現します。
上の表見てわかるように、8進数1桁は2進数の3桁分、
16進数1桁は2進数の4桁分に対応します。
バイトとは?
次にバイトです。上の方でビットの集合と書いていますが、ひとつの処理単位のようなもので
現在普及しているコンピュータやデバイスでは1バイトは8ビットで表されています。
つまり、8桁の2進数で表される単位が1バイトということになります。
上の表の2進数を見ると4桁までで表されています。
8ビットならば1111 1111 つまり、0~255の256通りの表現が可能です。
16進数で表すと0~FFです。
なぜ8ビットかというと、どうやら英語圏の人が文字を表すのに記号も含めて
256通りもあれば、お釣りが来るぐらいだからだという話らしいです。(その辺は詳しく知りません)
※7ビットしか使わない文字にASCIIコードと言うものがありますが文字コードの話はまた今度。
なので、1バイトは必ず8ビットだとは限りません。
コンピュータによっては1バイトが6ビットだったり9ビットだったりするかもしれません。
ただ、現在普及しているコンピュータは8ビットを1バイトとしているので1バイト=8ビット
と覚えても問題はないでしょう。(そもそも1バイトが8ビット以外の処理系を見たことないしw)
正確に8ビットという事を表現したい場合は、1バイトではなく、1オクテットといいます。
1オクテットはその名どおり、必ず8ビットです。
IPアドレス(IPv4の場合)は32ビットを8ビットずつ4つに分けて表現しますね。
この4つに分けた8ビットの塊1つを「オクテット」と呼びます。
これはどんな処理系でも必ず8ビットであるという事を強調しているようなものですw
IPアドレスとかネットワークに関してもまた別の機会にでもw
また、2バイトをワード、4バイトをダブルワードとか言ったりする場合もあります。
さて、ここまで長く書きましたがもう少し続けますw
データのサイズを表したりするバイトですが、ただの「バイト」だけだとデータ量を表すのにも
物凄い桁数で表さなければなりません。
そこで単位にキロやメガをつけるわけです。
わかりやすい単位だと、1kg=1000g、1km=1000mなどがありますね。
つまりキロは1000倍を表します。
ではメガは?キロの1000倍、つまり100万です。フリーザ様の53万より大きいですねw
バイトの単位でもキロバイト、メガバイト、ギガバイト、テラバイトと単位があります。
これも単位ごとにだいたい1000倍ずつぐらい増えていきます。
このだいたいとはどういうことでしょう?
情報の最小単位がビットだと書きました。
コンピュータの最小単位であるビットは2進数です。
なので1000とかいう10進数の単位で表すよりも2進数を基準に考えた方が
色々と都合がよい場合もあるんでしょうね。
下の表のように表されます。
1キビバイト 1キロバイト | 2の10乗=1024バイト 1000バイト |
1メビバイト 1メガバイト | 2の20乗=1024キビバイト 1000キロバイト |
1ギビバイト 1ギガバイト | 2の30乗=1024メビバイト 1000メガバイト |
1テビバイト 1テラバイト | 2の40乗=1024ギビバイト 1000メガバイト |
1ペビバイト 1ペタバイト | 2の50乗=1024テビバイト 1000テラバイト |
はて?
キビ?メビ?キロとかメガとかじゃないの?
はい、2進数を基準で考えた場合はキビバイト(KiB)やメビバイト(MiB)、
10進数を基準で考えた場合はキロバイト(KB)やメガバイト(MB)
で表すのが最近では流行って来ているとか。
1キビバイト(KiB)は1000バイトとして扱うのは間違いですが、
1キロバイト(KB)は1000バイトとして扱ったり1024バイトとして扱ったりと
なんかもうバラバラのようです。
プログラムを組む時は2進数単位の方が個人的にしっくり来るので
1024バイトを1キロバイトとしてよく扱います。
2進数は10桁増えるごとに1024倍ずつ増えます。
なので1000ではなく、1024が単位となっているのでしょう。
パソコン等で情報の単位を見ると1024バイト=1キロバイトで計算されています。
(単位はキビじゃないのに1024です)
ディスクやメモリの容量を表すのに使うバイト単位を使用していますが、こんな経験はないでしょうか。
1TBのハードディスクを買ったのにいざパソコンにつないだら
930ギガバイトぐらいしか容量がない!!残りの94ギガバイトはどこいった!?
はい。
ご愁傷様です、騙されたんですw
いや、というのは半分冗談で、実はこういうディスクなんかの記憶媒体の容量は
1024単位ではなく、1000単位で計算しているため誤差が生じているのです。
PCでは1024単位でキロやメガで扱うのに、もうなんかややこしいですね。
こんな感じで長々と書きましたが色々と端折りもしました。
ビットとバイトの関係はこんな感じになっています。
アルファベットの表記でも
1メガバイトは1MB、
1メガビットは1Mb
というように、バイトは大文字、ビットは小文字になっている場合が多いです。
回線速度なんかはビット単位が多いですね。
光回線100Mbps!と言った場合は、1秒間に100メガビットの情報を理論上送信可能です。
100メガビットといったら、8ビットで1バイトならば1秒間に送信できるデータは12.5メガバイトですね。
ま、実際には理論上の半分も速度が出た事はないですけどねw
ちょっと余計な話も加わりましたが、今回はこの辺で。