先週のIT利活用の会での話。
終了後にも雑談ベースで話をしていた中で
物事の根本的な仕組みがわかっていないと気持ち悪い、という特性の人から
質問がありました。
「コンピューターが0と1で動いているってどういうことですか?」
そこから??とたじろぎましたが
わかる範囲で説明しました。
結構な長時間、講義のようになってしまいました。
以下、長々と書いてしまいます。
間違ってたらご指摘ください。
2進数の説明
まず0と1で色んなものを表現するという話をする時には
2進数の説明をする必要があります。
僕らが日常的に使っている数字は10進数です。
0から9までの10個の文字を使って表現します。
0から始まり数字を増やしていき、
9まで来たらこれ以上表現する文字がないので桁があがり
10になるということですね。
2進数も仕組みは同じで、ただ取り扱う文字が0と1の2個だけということ。
日常的な数との比較で言うと
0 は 0
1 は 1
2 は 10 と、ここで桁があがります。
3 は 11
4 は 100 ここでも桁あがり。
5 は 101
6 は 110
7 は 111
8 は 1000 ここでも桁あがり。
まず、こんな感じで0と1だけで数字を取り扱えます。
0と1をどう取り扱うか
前述の2進数の説明をしたところで
0と1で色んな表現が出来そうだということをわかってもらい、
では物理的にどうやって0と1を取り扱うのかという話です。
0と1という数字は管理しやすいように表現しているだけで、
物理的にはなんらかの素子などがオンかオフになっている状態です。
例えば、半導体に電気が流れている状態がオン(1)
電気が流れていない状態がオフ(0)など。
つまり、なんらかのオンとオフをやり取り・保存できれば
0と1を取り扱うことができるということですね。
ネットでのデータのやり取りとか、
パソコンに入っているメモリやハードディスク・SSDなどの記録媒体などで
オン・オフの物理的な動きや判断はそれぞれだと思います。
16進数や8進数
なんらかの物理的なオンオフで0と1を作り出せていることと
0と1を組み合わせることで数字を表現できそうだということを説明したので
次にもうちょっと複雑なデータの表現について。
コンピューターは0と1の2進数が基本となりますが
それだけでは管理しづらいので
もうちょっと管理しやすい形にデータを変換します。
そこで出てくるのが8進数や16進数などです。
2進数の説明で書きましたが、
2進数の桁があがるのは2の乗数です。
ひとつの桁ごとにオンとオフを管理する素子があるわけなので
その素子の数ごとで管理できる数が「ちょうど区切りの良い数」になります。
例えば、0と1を管理できる素子が4つあったとしたら
0000から1111までのデータ、数字で言うと0から15までの16個のデータを管理できます。
素子が3つなら000から111まで、0から7までの8個のデータですね。
0と1が並んでいるだけだと管理しづらいので
素子4個をひとつのセットで考えよう、となった時に
16進数という扱いが出てきます。
2進数が0と1、日常的な10進数が0から9の数字で表現するのに対して
16進数は0から9に加えてアルファベットのaからfをその後につけます。
9 は 9
10 は a
11 は b
12 は c
13 は d
14 は e
15 は f
16 は 10 ここで桁が上がる
17 は 11
こんな感じ。
10進数に慣れていると難しく感じますが
0 と 1を表現する素子でデータを管理しているコンピュータにとっては
無駄なくデータを扱える単位になります。
0 と 1 の組み合わせでデータの管理をする時には
この16進数などが都合が良いというのが
なんとなくわかってもらえたでしょうか。
文字をどう管理しているのか
ここまでは日常コンピューターを使う時に
意識しづらい部分かと思いますので
もうちょっと身近な例を。
コンピュータを使っている中で
皆さん文字を使うと思います。
文章やメールを作る時には文字を書きますよね。
メールを受け取ったり、ホームページを見たりする時には
文字を見ますよね。
コンピューターを動かしているプログラムも
基本的には文字で書かれています。
その文字をどう取り扱っているのか。
コンピューターの文字の取り扱いとして
ASCIIコードというものがあります。
日常的に使う文字と、それは16進数ではこれね、という取り扱いルールですね。
下記がそのASCIIコード表です。
ASCIIとは 〔 アスキーコード 〕 【 US-ASCII 】 – 意味/解説/説明/定義 : IT用語辞典
例えばアルファベットの「Z」は16進数だと「5a」です。
ということは2進数で言うと「1011010」です。
この7桁のオンオフ素子があれば数字とアルファベットの文字を表現することができます。
このような形でコンピューターの世界で取り扱われる文字は
0と1で表現できるということになります。
あらゆるデータが01
単純なアルファベットは前述のように7桁の01で表現できますが
日本語文字や画像、動画などは表現するためのデータ量がもっと増えてきます。
それがどうやって01にまでなっているかは
色んな技術や仕組みがあって説明できませんが
基本的には前述のようにデータをどんどん分解して01にまで落とし込みます。
具体例を示すと、このブログのアイコンとして使っている下記の画像。
アイコン画像として人間が見えるような形になっていますが
コンピューターでそれがどう取り扱われているのかを確認することもできます。
2進数だとすごい数になるので16進数で表示するとこんな感じです。(一番左は目次)
0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
0000020 0000 c800 0000 c800 0608 0000 ad00 ae58
0000040 009e 0400 6924 4343 4950 4343 5020 6f72
0000060 6966 656c 0000 1138 5585 6fdf 54db 3e14
0000100 6f89 a452 3f16 5820 8747 c58a 55af 5b53
0000120 1bb9 ad1a 06c6 9349 eda5 164a e9a5 2ad8
0000140 e424 373a a989 071b e9db aab6 7b4f 3781
0000160 fc06 4001 03d9 480f 213c 060d 7b62 f6d9
0000200 b4c0 5349 2a87 49aa 7b48 c4e8 210f ed26
0000220 5505 bbe1 6276 5327 5cc4 faf5 39cb 39df
0000240 3be7 5ee7 44db 5f3d b569 199a 8855 ab96
0000260 9dae 24cf 9395 16a7 9e94 8a4d b3d2 4bd4
0000300 d403 e9ab 2d4e cb91 12cd c12e f715 ebce
0000320 1de1 088a edcb ee91 4efe 23f6 7abf dc8b
0000340 89d1 4f22 6ec0 1d15 197d 0cf8 cc51 6bd4
0000360 4bb6 bf14 fb07 69f8 06b7 f3dc f01c 36d3
0000400 0204 02ab 7d97 129c d178 27c7 4e3d 3f21
0000420 8e09 2ad0 15eb 08ad 06bc bc3c 66d8 b72f
0000440 5f61 1803 93c8 55e1 1b6e 22ba 9166 adb3
0000460 6192 cf72 2fe1 718f 31b7 0fff 9b2e f475
0000500 5dec 5883 9cfb b9a5 b863 890f 2bde 54f6
0000520 89be d73f f4b5 f01c b04b af5f 49b9 7f61
0000540 f805 fa8f 7cd2 7802 511f a9f4 7d92 de74
全部貼り付けようと思いましたが
意味なく長くなるのでごく一部です。
こうやって、コンピューターで取り扱うあらゆるデータは
0と1で表現することができるので、大量のオンオフ装置で管理することができます。
なんとなくでもわかったでしょうか?
説明するのも文字にするのも大変でした。
でも基本的なところから理解するというのは大切ですね。
息子にコンピューターを教える時は、どこかのタイミングでこの説明をしたいです。
このブログeshima.info(えしまドットインフォ)は
ビジネスやマーケティング、IT活用の記事を書いています。
ブログ購読はこちらのページをご覧ください。