解説
プログラムは、コンピュータに命令を実行させる手段です。コンピュータは、データを0と1で表わされた2進数の数字として扱います。この2進数について解説します。
普段、私達が両手で数えて使っている数字は、10ごとに桁が上がる、10進数という数え方です。世の中には、他にも色々な数え方があります。時計のように、60秒で1分のように桁が上がる数え方もあります。また、ビール箱のように、12本単位で数えるダースといった数え方もあります。2進数は、こういったものと同じような「数え方」になります。
では、2進数とはどんな数え方なのでしょうか? それは、2ごとに桁が上がる数え方です。0、1の次は、2ではなく、桁が1つ上がって10になります。慣れない人は、ちょっと分かり難い数え方だと思います。
2進数 10進数 0 0 1 1 10 2 11 3 100 4 101 5 110 6 111 7 1000 8 : :
なぜ、こんな特殊な数え方をするのでしょうか? それはコンピュータの機械的な仕組みが関係しています。その一例を、データの記録という面から見てみます。
コンピュータでは、数値などの情報を、記録場所に読み書きして管理しています。この記録場所は、分かりやすく言うと、コップが大量に並んでいるような状態になっています。
│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │ └─┘└─┘└─┘└─┘└─┘
このコップの中に水が入っているかどうかで、情報が「ある」か「ない」かを判断しています(実際には、この「コップの水」というのは、電磁的な記録だったり、光学的に読める物だったりします)。
問題なのは、このコップの中の水をどう読み取るかです。1%の水が入っているから「1」、98%の水が入っているから「98」と読んでもよいのですが、機械の精度が要求されます。また、読み取りエラーが置きやすくなります。
一番単純なのは、たとえば50%以上入ってれば「1」、未満なら「0」のようにして、「入っている」か「入っていない」かだけを判断する方法です。こうすれば、機械の精度はあまり要求されず、エラーも減ります。高速に読み書きしても、あまりトラブルは起きません。
このようにした場合、記録場所に0と1が大量に並ぶことになります。これは、そのまま2進数の表現になります。
┝━┥│ ││ │┝━┥│ │ │ ││ ││ ││ ││ │←真ん中の位置 │ │┝━┥│ ││ │┝━┥ └─┘└─┘└─┘└─┘└─┘ 1 0 0 1 0
そのため2進数は、コンピュータで取り扱うのに便利な数え方になります。
そして、プログラムでは、コンピュータの内部の動きを制御するので、必然的に2進数に触れることになります。
また、人間が10進数を使うのは、手の指が10本だという理由が大きかったりします。郷に入っては郷に従えということで、コンピュータ相手には2進数で数を数えるというわけです。
ちなみに、世界初のコンピュータENIACは、10進数を採用していたそうです。
サンプル
2進数の処理を、JavaScriptで簡単に書いてみます。
<html>
<head>
<title>「2進数」のサンプル</title>
</head>
<body>
<pre><script type="text/javascript">
document.writeln("10進数の0~100を2進数で表わす\n");
for (var i = 0; i <= 100; i ++) {
document.writeln(
form(i, 3)
+ " - "
+ form(i.toString(2), 7)
);
}
document.writeln("\n\n2進数を10進数で表わす\n");
for (var i = 0, s = "1"; i < 10; i ++, s += "1") {
document.writeln(
form(s, 10)
+ " - "
+ form(parseInt(s, 2), 4)
);
}
// 桁揃え用関数
function form(s, n) {
if (String(s).length < n) {
s = form(" " + s, n);
}
return s;
}
</script></pre>
</body>
</html>
10進数の0~100を2進数で表わす
0 : 0
1 : 1
2 : 10
3 : 11
4 : 100
5 : 101
6 : 110
7 : 111
8 : 1000
9 : 1001
10 : 1010
~~省略~~
95 : 1011111
96 : 1100000
97 : 1100001
98 : 1100010
99 : 1100011
100 : 1100100
2進数を10進数で表わす
1 : 1
11 : 3
111 : 7
1111 : 15
11111 : 31
111111 : 63
1111111 : 127
11111111 : 255
111111111 : 511
1111111111 : 1023
