Home >> Columns >> Numerical Systems


コラム(整数の記法とn進数)


■位取り法とn進数について

☆位取り法の必要性

位取り法とは、数字の位置によって、桁が示される数の記述方法です。たとえば、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
		

このように位取り法では、「数の位置」によって「桁」が表わされます。一桁でも抜けてしまうと違う数になって しまうのが問題ですが、ローマ数字などと比べてみればわかるように、大きな数まで少ない桁数で表記できることが わかります。また、加減乗除の計算も、位取り法でない場合と比べれば、位取り法で表わされた数は非常に簡単に 手で計算ができます。

☆値をn進数の位取り法で表記する方法

逆に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進数との関係について

コンピュータの世界では、16進数は2進数を4桁ずつ下位の桁から区切って読んでいけば良いので、 結構普及しています。というよりも、2進数をそのまま読むと、もうすごく桁が長くなって、読みにくいからです。 そこで、16進数と2進数との関係についておさらいしておきましょう。

2進数16進数10進数    2進数16進数10進数
000000 100088
000111 100199
001022 1010A10
001133 1011B11
010044 1100C12
010155 1101D13
011066 1110E14
011177 1111F15

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は、あまり使われていません。

☆古代文明とn進数

ローマ数字は既にみたように、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はありません。


出典:WikiMedia Commonsより

その後、メソポタミア文明は、シュメールの首都であったウルがアッカード朝に吸収され、 アッカード朝時代になり楔形文字になりましたが、その後のバビロニア時代(ハンムラビ王とその法典が有名)に使われた 楔形文字による1から59までの数字を以下に記します。Yのような下向きの楔が1を、<のような横向きの楔が10を表わして います。


出典:WikiMedia Commonsより

その後、位取り法のような形に移行したと思われますが、こんな記述なのでかなり混乱したことが予想されます。 その後、バビロニア時代後期になって完全な位取り法になり、0が導入されました。ドット(・)で表わしたようです。

☆マヤ文明

同じように、紀元前後に栄えたマヤ文明も、20と18が交互に基数として使われていました。1、20、360、7200、129600…です。 ただし、20までの数を表わすのに、以下のような横棒(5を表わします)と点(1を表わします)を使っていました。 マヤ暦は非常に合理的な暦を3つ持っていました。これらの暦は、ある意味、人間が作ったうちで一番合理的な暦とも 言われております。現在のグレゴリオ暦は、いろいろな歴史的変遷を経たため、そのようなしがらみが残っております。 また、下図でもわかりますように、位取り法でゼロを示す数字(貝の形のような文字)が残されております。


出典:WikiMedia Commonsより

実は、マヤ文明では、この単純な数の字体以外に、頭字体というのもあります。


出典:The Maya Arithmeticより

マヤ文明は、最初から位取り法が導入されていましたので、基数のべき乗を表わす記号が残されていません。 我々の漢字圏でいうような「百」とか「千」とか「萬」とかを表わす記号はありません。

☆エジプト文明

360は、エジプト文明では神聖な数として使われていました。もちろん、現在でも角度を示すときには、360度体系を用います。 マヤ文明との対比でみて下さい。マヤ文明でも360が基数に含まれております。約数が多い以外にも、一年の日数(公転周期) が365日余であったことなども関係しているようです。いろいろな憶測がありますが、定説はありません。エジプト文明では、 通常は10進法が使われており、それぞれの基数のべき乗に対して、次のような記号が用意されております。 位取り法ではないので、こんな記号を一杯描きます。


出典:不明、ごめんなさい。もう少し小さい桁までのものが Wikipedia(英語版)にあります。

ご紹介したいのは、エジプト文明での乗算法です。これは、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