Home >> Columns >> Numerical Systems
位取り法とは、数字の位置によって、桁が示される数の記述方法です。たとえば、542は、五百四十二を示します。 位取り法がなかった古代文明、メソポタミア、エジプト、それに続くギリシャ・ローマ、あるいは黄河文明は、 位を表すための記号が用いられていました。たとえば、漢数字の千二十一は、1×千+2×十+1を表しています。 千と十とがそれぞれ位を表すものです。たとえば、ローマ数字では、Iは1を、Vは5を、Xは10を、Lは50を、 Cは100を、Dは500を、Mは1000を表します。たとえば、位取り法で表記された、1876は、 次のように表さなければなりませんでした。
1876→ローマ数字ではMDCCCLXXVI
ちなみに、1つ桁の少ない単位を右ではなく、左に書きますと「マイナスする」という略記法が後世に 編み出されました。これは、1つの数を表わすのに通常のローマ数字の表記では長すぎてしまうのを なんとか短くしようと努力した結果かと思われます。
4→IV 9→IX 40→XL 90→XC 400→CD 900→CM 1984→略記法ではMCMXXCIV、通常に書くとMDCCCCLXXXIIII
数を位取り法で表すためには、「0」という記号が必要でした。千二十一は、1021 という形で、百を表す桁が0であることを示さなければなりません。 この「0」を用いた位取り法は、6〜7世紀頃のインドの数学で導入され、アラビア数字(現在我々が使っている 数字)に反映され、西洋に採り入れられたのは15世紀以降でした。それから、現在の我々が知っている 数学が発達します。
さて、紀元前後に栄えた古代マヤ文明では、数の表記は位取り法によって、記されていることがわかっています。 「0」を表す特殊な文字も用いられています。古代マヤ文明の天文学の正確さや、数の記述能力の正確さ、 合理的な暦の作られかたは目を見張るものがあります。なぜ、そこまで発達した文明であったかは、誰も 説明することができません。
位取り法を用いれば、10進数でも12進数でも2進数でも16進数でもすべて数の記述の仕方は同じです。 上位の(左に書かれる)桁は、基数倍された数を示しています。 この基数の表記が違うだけで、同じ整数を表すことには違いがありません。 たとえば、10進数では、5に対して、50は、10倍された50という数を示しています。 16進数では、4に対して、40は16倍された、10進数で表記するところの64という数を示しています。 2進数では、1に対して、10は、2倍された、10進数で表記するところの2という数を示しています。 n進数を10進数に変換したければ、基数を掛けていけば良いことになります。
まず10進数についておさらいしておきましょう。10進数での「479」という数の表記は、次のように計算されます。
4×102(=10×10) + 7 × 101(=10) + 9× 100(=1) → 400 + 70 + 9 → 479
同じように、16進数の「2a7」という表記は、次のように計算されます。 ちなみに16進数では、a=10, b=11, c=12, d=13, e=14, f=15を表します。
2×162(=16×16) + a(=10) × 161(=16) + 7× 160(=1) → 512 + 160 + 7 → 679
2進数もやっておきましょう。「1101011」という数の表記は、次のように計算されます。 0は何を掛けても0になりますので、1の部分だけ足せばよいことがわかります。
1×26(=64) + 1 × 25(=32) + 0× 24(=16) + 1×23(=8) + 0 × 22(=4) + 1× 21(=2) + 1× 20(=1) → 64 + 32 + 8 + 2 + 1 → 107
このように位取り法では、「数の位置」によって「桁」が表わされます。一桁でも抜けてしまうと違う数になって しまうのが問題ですが、ローマ数字などと比べてみればわかるように、大きな数まで少ない桁数で表記できることが わかります。また、加減乗除の計算も、位取り法でない場合と比べれば、位取り法で表わされた数は非常に簡単に 手で計算ができます。
逆に10進数表記された整数を、n進数表記するには、基数で割っていき、余りを取ります。 まずは、10進数でおさらいをしておきましょう。「745」を表わすのには、次のように10で割っていき、余りを取ります。
745÷10=74 余り5 74÷10=7 余り4 7÷10=0 余り7
余りを下から上に向かって順に拾っていけば、「745」になりますね。これは、10進数以外でも同じ原理になります。 たとえば、10進数で表記された数を2進数で表記したい場合には、その数を基数の2で割っていき、 余りを求めます。たとえば、「13」にしましょう。0になるまで、2での整数除算を繰り返します。
13÷2=6 余り1 6÷2=3 余り0 3÷2=1 余り1 1÷2=0 余り1
このときの余りだけを、下方向から上に向かって読んでいけば、「1101」で、 これが、10進数の13の2進数表記です。1×23(=8) + 1 × 22(=4) + 0× 21(=2) + 1× 20(=1) → 8 + 4 + 0 + 1 → 13で検算できますね。
同じように、3進数で表記してみましょう。3進数では、それぞれの桁の値としては0, 1, 2しか出てきません。 これも上記のやりかたと同様に、基数を3で割っていきます。「29」で試してみましょう。
29÷3=9 余り2 9÷3=3 余り0 3÷3=1 余り0 1÷3=0 余り1
ということで、余りの部分を下から上に向かって読んで行けば、10進数の29は、 3進数では「1002」となります。1×33(=27)+2→29で検算できますね。
コンピュータの世界では、16進数は2進数を4桁ずつ下位の桁から区切って読んでいけば良いので、 結構普及しています。というよりも、2進数をそのまま読むと、もうすごく桁が長くなって、読みにくいからです。 そこで、16進数と2進数との関係についておさらいしておきましょう。
2進数 | 16進数 | 10進数 | 2進数 | 16進数 | 10進数 | |
---|---|---|---|---|---|---|
0000 | 0 | 0 | 1000 | 8 | 8 | |
0001 | 1 | 1 | 1001 | 9 | 9 | |
0010 | 2 | 2 | 1010 | A | 10 | |
0011 | 3 | 3 | 1011 | B | 11 | |
0100 | 4 | 4 | 1100 | C | 12 | |
0101 | 5 | 5 | 1101 | D | 13 | |
0110 | 6 | 6 | 1110 | E | 14 | |
0111 | 7 | 7 | 1111 | F | 15 |
2進数の欄の「0000」は、「0」と読み替えて下さって構いません。4桁ずつ下から読んでいくので、あえて 4桁分表示してあります。さて、この表を使えば、、たとえば、次のような2進数があった場合、下の桁(最下位の桁)から 4桁ずつ区切っていって、16進数に置き換えることができます。
111010001001111101 → 11,1010,0010,0111,1101 → 3A27D
あるいは、16進数から2進数の変換も容易です。ただし最上位以外の下位の桁では、かならず4桁分の2進数を確保しなければ いけません。下の例では、「4」の部分がそのようになっています。「4」自体は2進数で表わすと「100」で済みますが、 ここでは変換をするために、「0100」としてあります。
5F4B → 0101,1111,0100,1011 → 101111101001011
このように、2進数と16進数は4桁ずつ区切れば、すぐに変換できるために、2進数を基準とした コンピュータの世界では、16進数が好まれて使われています。2進数1桁が1ビットですから、4桁ずつ でものごとが増えていくのがお解りになるでしょう。4bit, 8bit, 16bit, 24bit, 32bit, 64bit, 96bit, 128bitなどは、 そんな関係から良く使われています。なぜか、12bitや20bitは、あまり使われていません。
ローマ数字は既にみたように、10進数と5進数をベースにしています。 古代メソポタミア文明(その一番最初はシュメール文明と呼ばれる)は、10進数と60進数をベースとしています。 古代エジプト文明は、基本的には10進数表記でしたが、シュメールもエジプトも、 角度に関しては、当初より現在と同じ360進数を使っていました。これもどうしてだか謎のままです。 マヤ文明は20進数を基本としていました。 ケルト文明は、12進数を使っていました。 英語に「eleven」と「twelve」やドイツ語に「elf」と「zwölf」があるのは、その名残です。 時間は、古代から現在まで、12または24進数になっていますね。 月も12ですね。これは、自然的なもので、月の周期からすれば、だいたい12回で1年になりますので、 そこからきたものではないかと推察されております。 分や秒は60進数になっています。 n進数はいろいろなところに生きております。
このように、10進数以外でも、12進数や60進数が普及しているのは、実は、隠れたメリットがあります。 10進数よりも約数(割り切れる数)が多いからです。約数を見てみましょう。
10の約数:1, 2, 5, 10 12の約数:1, 2, 3, 4, 6, 12 16の約数:1, 2, 4, 8, 16 20の約数:1, 2, 4, 5, 10, 20 24の約数:1, 2, 3, 4, 6, 8, 10, 20 60の約数:1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60 360の約数:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 18, 20, 24, 30, 36, 40, 45, 60, 72, 90, 120, 180, 360
10よりも12の方が約数が多いですね。 同じように20よりも24の方が約数が多くなっています。 注目すべきは、360が7以外の1桁のすべての数で割り切れることです。
基数としては皆さんに一番お馴染みは、10と60だと思います。 上記の節に示しましたように、時間換算に60進法を使うのは、 古代シュメール文明から現在まで5000年以上使われている方法です。 なぜ、最初の文明がこんなに進化した60進法を使っていたのかは謎です。 もちろん、約数の多さはあると思いますので、最初から加減乗除について基本的な数の知識を、 この人類最初と(定説では)言われているシュメールの文明が有していたことになります。 ここでは、更に、いくつかの古代文明の基数を採り上げ、古代文明の優秀さを披瀝したいと思います。
まず前途の古代シュメール文明は、単なる60進法ではなくて、10進法と6進法の組合わせで、基数が使われていました。 ですから、10と6が交互に基数として使われます。1、10、60、600、3600、36000…という具合です。 そのための、それぞれの基数を表わす記号が以下のように用意されております。位取り法ではないので、0はありません。
その後、メソポタミア文明は、シュメールの首都であったウルがアッカード朝に吸収され、 アッカード朝時代になり楔形文字になりましたが、その後のバビロニア時代(ハンムラビ王とその法典が有名)に使われた 楔形文字による1から59までの数字を以下に記します。Yのような下向きの楔が1を、<のような横向きの楔が10を表わして います。
その後、位取り法のような形に移行したと思われますが、こんな記述なのでかなり混乱したことが予想されます。 その後、バビロニア時代後期になって完全な位取り法になり、0が導入されました。ドット(・)で表わしたようです。
同じように、紀元前後に栄えたマヤ文明も、20と18が交互に基数として使われていました。1、20、360、7200、129600…です。 ただし、20までの数を表わすのに、以下のような横棒(5を表わします)と点(1を表わします)を使っていました。 マヤ暦は非常に合理的な暦を3つ持っていました。これらの暦は、ある意味、人間が作ったうちで一番合理的な暦とも 言われております。現在のグレゴリオ暦は、いろいろな歴史的変遷を経たため、そのようなしがらみが残っております。 また、下図でもわかりますように、位取り法でゼロを示す数字(貝の形のような文字)が残されております。
実は、マヤ文明では、この単純な数の字体以外に、頭字体というのもあります。
マヤ文明は、最初から位取り法が導入されていましたので、基数のべき乗を表わす記号が残されていません。 我々の漢字圏でいうような「百」とか「千」とか「萬」とかを表わす記号はありません。
360は、エジプト文明では神聖な数として使われていました。もちろん、現在でも角度を示すときには、360度体系を用います。 マヤ文明との対比でみて下さい。マヤ文明でも360が基数に含まれております。約数が多い以外にも、一年の日数(公転周期) が365日余であったことなども関係しているようです。いろいろな憶測がありますが、定説はありません。エジプト文明では、 通常は10進法が使われており、それぞれの基数のべき乗に対して、次のような記号が用意されております。 位取り法ではないので、こんな記号を一杯描きます。
ご紹介したいのは、エジプト文明での乗算法です。これは、2進数の概念を利用しています。もちろん、エジプト文明の 人々が2進数という概念を持っていたかどうかは不明ですが、完全に現在のコンピュータのハードウェアで用いられている 2進数を利用した計算方法です。
たとえば、43 × 11を計算するときに、古代エジプトではどうしたかというと、乗数の11を、2進数のべき乗の数だけ から構成されるように分解します。11 = 1 + 2 + 8です。そして、この分解された数と被乗数の43を掛け合わせます。
43×1 = 43 43×2 = 86 43×8 = 344
そして、この3つの数字を足し併せて、答えと致します。43+86+344 = 473が答えです。位取り法のない世界で 数の掛け算をするのは、至難の業(たとえば、ローマ数字でXXXXIII × XIをどう計算するのか考えてみれば明らかでしょう) なのですが、エジプト文明ではこのような方法で、高度な計算技術を他にもいろいろと有しておりました。後は、 参考文献を読んでください。
参考文献:「数」の秘密 : 記数法と無限 / ミッドハット・ガザレ著 ; 小屋良祐訳,青土社,2002年.
<<Algorithms | ⋏ Return to Columns | >>Patterns |