桁取りについて
コンピュータ用の言語で文化が違うとつくづく思うことの一つに数についての考え方の違いがあります。前に数える最初の数が人間の世界と違う話をしました。
人は数を数える時に10を基本として数えています。9に1を足した数それまでの1桁数字の左側に数字を書くスペースを確保して10個が1つあるという意味で1とそこに書きます。今まで9だった右側の1の位は左側の10の位で数が表現されているため0となります。0と書かないとそれが1の位であるのか10の位であるのかわからなくなってしまうからです。
このように10が基本になって桁が増えて行く数字の数え方を10進法といいます。おそらく人の手に10本の指があったからと言われています。人は両手の指で数えるものをひとまとまりと考えているのです。
古代バビロニアでは12進法や60進法も使われていました。12進法は12に達すると桁が1つ増える数え方です。例えば鉛筆の箱売りは12本入りで12本入りのものをダースと呼びます。ダースがさらに12個集まるとグロスと言います。1グロスは12×12で144です。時計の60秒を1分、60分を1時間とする数え方は60進法となります。
12進法については古代人の指が6本あったという人もいますが合理的な説明としては12は2、3、4で割り切れるという数の性質によるものです。あるものを分配する際に12に分ければ二人でも3人でも4人でも争うことなく分けられます。60進法はさらに5で割ることができます。
一方10進法で割りきれるのは2か5なので商取引きでは使いにくかったと思われます。日曜大工の好きなアメリカ人はフィートの便利さについて1フィートは12インチなので3つにも4つにも分けやすくて便利だといっていました。
なぜコンピュータは2進法なのか
前置きが長くなってしまいました。現在のコンピュータの仕組みは値の捉え方にonかoffの2種類しか扱えることができません。スイッチのようなイメージでその間の曖昧な状態を表現することはできません。
仮にoffを0、onを1と考えましょう。
2進法の数の表現方法
ただこれだけだと2つの数しか数えられないのでスイッチをもう一つ左側に並べます。この新しいスイッチは2を数えるために使います。これを2の位と呼びます。
10進数を思い出してください。一桁めでは9まで数えられるのですがその1つ上の数字は桁からはみ出してしまいます。その場合は桁で表現できる最大値9に1を足した数字、つまり10の桁を左側に追加していました。
2進数でもこの考え方は同じです。一桁めで1まで数えられるのですが1つ上の数字は数えられません。このため桁で表現できる最大値に1を足した数字、つまり2の桁を左側に足すのです。
このようにすると2 × 2で4通りの数字を表現できます。わかりやすく表にします。2の位のスイッチがonの場合は値は1となっていますが、全体の計算では「2の位の値が1」と考えるので2になります。
左のスイッチ:2の位 | 右のスイッチ:1の位 | 計算 | 値 |
---|---|---|---|
0 | 0 | 0 × 2 + 0 × 1 | 0 |
0 | 1 | 0 × 2 + 1 × 1 | 1 |
1 | 0 | 1 × 2 + 0 × 1 | 2 |
1 | 1 | 1 × 2 + 1 × 1 | 3 |
ここで使っていたスイッチのことをコンピュータ用語ではビットといいます。2ビットで数えられる数は2 × 2で4になります。
念のため3ビットの例も書いておきます。表も少し簡単にします。
4 | 2 | 1 | 計算 | 値 |
---|---|---|---|---|
0 | 0 | 0 | 0 + 0 + 0 | 0 |
0 | 0 | 1 | 0 + 0 + 1 | 1 |
0 | 1 | 0 | 0 + 2 + 0 | 2 |
0 | 1 | 1 | 0 + 2 + 1 | 3 |
1 | 0 | 0 | 4 + 0 + 0 | 4 |
1 | 0 | 1 | 4 + 0 + 1 | 5 |
1 | 1 | 0 | 4 + 2 + 0 | 6 |
1 | 1 | 1 | 4 + 2 + 1 | 7 |
3ビットでは2 × 2 × 2つまり2の3乗の8種類の数字を表現できます。32ビットのコンピュータというと32ビットつまり2の32乗で表されるデータを1つの単位で計算できる、という意味になります。
32ビットを計算すると4,294,967,296と43億近くの値を表現できます。