バイナリとはbinaryである。
”bi” というprefixが付いた英単語は ”二つの” という意味がある。
- bicycle ”チャリ”
-
bisexual ”バイセクシャル”
同じようにbinaryも二つの状態を表すものである。
コンピューターは2進数で情報を扱う
画面にはたくさんの文字が表示されている。
しかし、コンピューターは文字を直接扱うことはない。
テレビ番組 トリビアの泉 内のコーナーに トリビアの種 がある。
トリビアの種では視聴者から寄せられたお便りをもとに、どれぐらいのインパクトのトリビアが生まれたのか主宰のタモリ氏が評価を行っていた。
「ご覧ください。満開です。」
このスタジオ内には1枚の "満開" と書かれた巨大なパネルは存在しない。
画像を見る限りでは9×9枚のパネルが整列し一つの絵を作り出している。
コンピューターで文字を表示する際も同じである。
マシンの中には ”あ” や ”A” といった文字はどこにもない。
すべての文字はマシンで扱うために文字コードという番号が割り当てられる。
| 元の文字 | 文字コード UTF-8 |
|---|---|
| A | 01000001 |
| あ | 11100011 10000001 10000001 |
あくまでイメージだが、マシンはこの文字コードをもとにパネルをガッチャンコして表示しているということだ。
ちなみに我々が普段使用しているコンピューターの中では ”0” と ”1” しか登場しない。
2進数である。
2進数には無駄がない。
指で数を数えてみよう。
両手の指を合わせて10まで数えられる。
この数え方は実に無駄である。
立てた指の本数で数を表すのは実に非効率である。

実にもったいない。
我々はハンドサインで多様な表現ができるのだ。
このサイン一つひとつに数を割り当てたら効率が良いのではないのだろうか。
親指から小指まで役割をふってみよう。
立てた指に割り振られた数を足すようにする。
今まではただ立てた指の本数を数えるだけだったが、各指に役割を与えることでよりたくさん数えることができるようになった。
この数え方は2進数の指折り法と呼ばれるものである。
詳しい手法の解説はこちらを参照されたし
手で数を数える際に2進数を使用すると片手で31まで数えることができるようになる。
じゃあ両手を使えば62までいける?
62どころではない、1023まで数えることが可能である。
実際にそこまで数えることはないが、それだけの威力を持っているのである。
そして16進数へ
もう一度、先の文字コードを見てみよう。
| 元の文字 | 文字コード UTF-8 |
|---|---|
| A | 01000001 |
| あ | 11100011 10000001 10000001 |
目がチカチカするのである。
ヒトの目で瞬時に把握できる数は4から5個といわれている。
それ以上の数を把握するには頭の中で数えながら指でなぞる必要がある。
ちなみにチンパンジーは瞬時に20個程度の数を把握できるといわれている。
アダムとイブがリンゴではなくバナナを食べていればこんなことにはならなかった。
同じデータでも人の目で理解しやすくするために、2進数を4ケタごとに区切って文字を割り当てる16進数を導入する。
16進数では ”0~9”までの数字 と ”A~F”までの英字 を組み合わせて数を表現する。
注意
何進法で記述されたのかを判別できるように
- 0x(16進数の場合)
- 0b(2進数の場合)
を追記する慣習がある
| 10進数 | 2進数 | 16進数 | memo |
|---|---|---|---|
| 1 | 0b0001 | 0x01 | |
| 2 | 0b0010 (桁上がり) |
0x02 | |
| 3 | 0b0011 | 0x03 | |
| 4 | 0b0100 (桁上がり) |
0x04 | |
| 5 | 0b0101 | 0x05 | |
| 6 | 0b0110 | 0x06 | |
| 7 | 0b0111 | 0x07 | |
| 8 | 0b1000 (桁上がり) |
0x08 | |
| 9 | 0b1001 | 0x09 | |
| 10 (桁上がり) |
0b1010 | 0x0A | |
| 11 | 0b1011 | 0x0B | |
| 12 | 0b1100 | 0x0C | |
| 13 | 0b1101 | 0x0D | |
| 14 | 0b1110 | 0x0E | |
| 15 | 0b1111 | 0x0F | 2進数の4桁を16進数では1桁で表せる |
| 16 | 0b10000 (桁上がり) |
0x10 (桁上がり) |
bit(ビット)とbyte(バイト)
生物の最小構成単位が細胞であるようにコンピューターが扱う情報にも最小の単位が存在する。
それがbitと呼ばれるものである。
表現方法
1bitは1桁の2進数で表現され、 "0" と "1" の2パターンを表すことができる。
2bitでは "00" ・ "01" ・ "10" ・ "11" の4パターンを表すことができる。
このようにbit増えれば増えるほど表現できる値も多くなる。
コンピューターで数字のほかに、アルファベットや記号などを扱えるようにすれば英語圏では動作に支障はほぼない。
| 種類 | 文字 | 個数 |
|---|---|---|
| 英小文字 | a ~ z | 26 |
| 英大文字 | A ~ Z | 26 |
| 数字 | 0 ~ 9 | 10 |
| 記号 | $ @ { ... | 32 |
| 制御文字 | <DEL> <ESC> | 33 |
| 計 | 127 |
以上から 127種類の文字 を2進数で表すためには 7bit あれば表現が可能だ。
2^7 = 128
さらに1bit余裕を持たせた "8bit" が一つの基準となっている。
ちなみに1bit増えるだけで
2^8 = 256
256通りまで表現できるようになる。
コンピューターは8bitで一つのまとまりとすることが非常に多いため、8bitを1byte(バイト)とまとめるようになった。
16進数とbyte
8bitを1byteとしたことで、16進数での表示が非常に美しくなる。
例えばひらがなの "ね" の文字コード111000111000000110101101を例に見てみよう。
- まずは4桁ごとに区切る
1110 0011 1000 0001 1010 1101 - 各4桁を10進数に変換
1110(14) 0011(3) 1000(8) 0001(1) 1010(10) 1101(13) - 変換した数字を10進数を16進数に変換
14(E) 3(3) 8(8) 1(1) 10(A) 13(D)
0b111000111000000110101101 を変換することで 0xE381ADへ変換することができた。
まとまりを意識する。
16進数の1桁分は4bitに対応する。
つまりE381ADはE3 81 ADと分けて3byteであることがわかる。
たった2桁で1byteを表すことができるのである。


