ボンガルド問題は大問題なのだ非言語的認知モデルはオカルトか?

2016年07月05日

できるだけわかりやすく説明してみるという実験:「コンピューターは0と1の世界」っていうけど、どういう意味?

算数クイズでこういうものがある。

ある7日間だけの肉体労働で、7日間働くとその報酬として金の延べ棒が与えられる、というものがある。
ただし、初日に延べ棒を渡すわけにはいかないし、最終日まで全くもらえないというのは働く側に不満がある。途中で辞めたくなった場合はそこまでの分を貰いたい。
そこで毎日、仕事が終わった後に1日分の延べ棒の切れ端を渡す、ということで合意になったのだが、この金の延べ棒を7日間毎日、その日の分を払うためにはどう切ればいいか?ただし、2回しか切ってはならない。

この問題の答えとして、ひとつジョークがあるのだが、金は比較的柔らかいので、無理矢理S字に曲げて、二箇所で切ればなんとか7等分できる、と。
bit-1 
どこがジョークかといえば、「これが$マークの発祥である」というオチだ。

この問題は、プログラマーであればだいたいピンッとくる。
正解は、下図のように1:2:4となるように、二箇所で切る、ということだ。

bit-2-1
この1、2、4の切れ端を渡したり返したりすることで、毎日1ずつ7日間賃金を払うことができる。
bit-2-2
なぜこれが「プログラマーならすぐにわかる」のかといえば、コンピューターで使う二進数というものがまさにこれだからだ。

「コンピューターは0と1の世界」などとよく言われるが、どういう意味なんだろう?
一般的に0はオフの状態。1はオンの状態。
電球で言えば消えている時が0、点いている時が1。
電球が3つあり、それぞれを1、2、4とすれば、そのオン/オフで、0から7までの数を表すことができる。
上記のクイズと全く同じである。
bit-3-1
電気部品でコンデンサーというものがある。
コンデンサーは電気を蓄えたり、放電したりする。つまり、2種類の状態を持つことができる。これも0と1だ。
「電気を蓄えることができる」ということは、言い換えれば「状態を記憶することができる」ということになる。これがコンピューターのメモリーに相当する。
もちろん現代のコンピューターではメモリーにコンデンサーを使っているわけではないが、原理は同じで、極小にしたコンデンサーのようなものがデータを記憶している、と考えてよい。

人間は指が10本あるので十進数を使うが、コンピューターはオン/オフの状態を基本とするので二進数を使う、というわけである。 

この二進数のひと桁を"ビット"という。よく"32ビットパソコン"とか"64ビットパソコン"とかいうやつだ。
あれは、一度に処理するデータの単位を言っている。
また、通信速度を表す"ビットレート"というものもよく聞くかもしれない。「1秒間に何ビット転送できるか」という単位として、bps(bit per second)というものがある。

都合の良いことに、4ビットで0〜15までの16の数字を表現できることから、4ビットをまとめて16進数として扱う。
これはさすがに0と1では桁数が多くなりすぎて、人間には扱いにくいので4ビットごとに扱う、ということだ。
数字としては、0〜9は十進数と同じだが、10以降は、A(=10)、B(=11)、C(=12)となって、F(=15)と表す。
bit-3-2
プログラミングなどでは二進数そのままでは扱いにくいので、この16進数を使うことが多い。
ただ、そのままでは十進数と区別がつかないことがあるので、16進数の場合は頭に"0x(ゼロ、エックス)"を付けて、あるいは後ろに"h"を付けて、"0x12"、"12h"などと表す。

さらに8ビットをまとめて"バイト"と呼ぶ。4ビット+4ビットなので、16進数では2桁で表すことができる。
8ビットでは、0〜255の数字を表すことができる。
bit-3-3
文字は2バイトで表すことが多い。2バイトあれば、65,536までの数字を表すことができるので、0から65,536までのそれぞれの番号を特定の文字に関連付けて「文字コード」として国際的に共通のルールにしている。これで漢字もどこかの国の文字もすべて表すことができる。 

ビットとバイトを間違うと大変なことになる。
先ほどの"bps"の"b"をバイトと勘違いすると、速度を8倍間違うことになる。
メモリーのサイズやハードディスクのサイズはバイトで表すが、通信速度はビットで表す、という慣例になっていると思っておけばよい。

たとえば「1Tバイトのハードディスク」というものは、1T=1,000G=1,000,000M=1,000,000,000K=1,000,000,000,000 (*1)
なので、なんと1兆バイトの記憶容量がある、ということだ。
先ほど書いたように一文字が2バイトなので、1Tバイトのハードディスクには5千億文字が入ることになる。

*1:実際は1T=1,024G、1G=1,024Mというように、1000ではなく1024で計算する。これは2進数の10ビットで丁度1024となることから、この方が計算しやすいためである。が、一般的には1000の方が人間には分かりやすいので、1000が使われることもよくある。

【今回のまとめ】
  • 「コンピュータは0と1の世界」とよく言うが、これはオン/オフのことである。
  • 電球が3つあれば、0〜7までの8つの数を表すことができる。
  • 二進数のひと桁を"ビット"という。
  • 4ビットで0〜15までを表すことができるので、便宜上これを16進数に置き換えて考えることが多い。
  • 8ビットをまとめて"1バイト"という。これは16進数の2桁にあたり、0〜255までの数を表すことができる。
  • 文字は2バイトで表すことが多い。0〜65,536までの数字が各文字にマッピングされ、「文字コード」になっている。
  • 1Tバイトのハードディスクには5千億文字が入る。 


OLランキングで1位になりたい!賛同していただける方は下記をクリック!
にほんブログ村 OL日記ブログ ドジOLへ

コメントする

名前
 
  絵文字
 
 
ボンガルド問題は大問題なのだ非言語的認知モデルはオカルトか?