位取り記数法

位取り記数法とは、いくつかの数字を並べて数を表す方法である。

数字ないし決まった文字数の数字列の置かれた位置を位または桁桁という呼称は、そろばんの珠を通す軸を桁と呼ぶことに由来するsfnと呼び、数字の位を決めることを位取りという。

一つの桁を N}} 種の数字列の組み合わせで表す位取り記数法をmvarあるいは単に mvar「mvarと呼ぶ。また、数 N}} を基数集合論における基数とは、日本語は同じだが異なる概念である。混同を避けるため、本項では次に挙げる「底」の語を主に用いる。}}ないし底と呼ぶ。 例えば、一般的に用いられる 0 から 9 までのアラビア数字による記数法は十進法にあたる。十進法でない例として、時刻や角度を表す単位の分や秒は六十進法が使われている。またコンピュータの分野においては数値表現に二進法とその派生である八進法や十六進法がしばしば用いられる。

位取り記数法は古代中国に由来する。中国では紀元前14世紀の商時代にすでに十進法が用いられており、紀元前4世紀にはゼロを空位として記述する位取り記数法を用いていた。対してヨーロッパにおける最古の十進法が記述された文書は976年のスペインの手稿本である。

本項では N}} が 2 以上の整数の場合を扱う。それ以外の場合については広義の記数法の記事を参照のこと。また後述するp}} 進数の概念とは別概念であるので注意が必要である。

1. 記法
-----

2}} 以上の整数 N}} を底とする位取り記数法において、それぞれの位の値は 0}} から //N// − 1}} までの N}} 個の非負の整数に対応した数字で表される朝倉『数学辞典』。 非負の数は位取り記数法によって、以下のように表される：

ここで //d//sub は位の値朝倉『数学辞典』を表し、添字 k}} はここでは Nsupmvarの位の冪指数を表す。添字 k}} が 0 以上の位の値の並びは整数を表し整数部と呼ばれる。添字 k}} が −1}} 以下の位の値の並びは小数部と呼ばれる。整数部と小数部は小数点本項では小数点にピリオドを用いる。他にコンマや中黒などが用いられる。}}によって区切られる。もし位取り記数法で表される数が整数ならば、小数点は書かなくともよい。m}} は整数部の桁数を表す。小数部について、1=//k// = −1, −2 , ...}} の位はそれぞれ順に小数第一位、第二位、……と呼ばれる朝倉『数学辞典』。

また負の数は負符号を数字列の前方につけて表す朝倉『数学辞典』：

位取り記数法による数の表示は、底の冪 Nsup とその位の値 dsub の積の和の略記と見なせる：

ここで右辺の和の記号は以下を表す：

例えば、十進法における 123.45}} は、

と展開できる。

小数部の位の値は有限個の場合もあれば、そうでない場合もある。N}} 進法で循環小数となるような有理数や、無理数は有限の桁数では表せないため、末尾に省略記号を付けて有限桁でないことを示す。

循環小数について、以下のように、循環節を上線などによって示す記法も用いられる：

ここで λ}} は循環節の長さを表し、r}} は循環節が始まる位を示す。例えば十進法において sfrac は 0.0overline と表される。

1.1. 底の明示
---------

慣習的に、特に断りのない限り、位取り記数法で示された数は十進数と解釈される。異なる底を用いていることを示すため、以下のように底を併記することがある：

または底を括弧で囲わず、

あるいは数を括弧書きして、

上記の記法において、底の数自体は十進法で表記される。例えば、10sub は二進数であり、十進数 2}} に等しい数を表す。また 100sub 十六進数であり、十進数 256}} に等しい数を表す。

その他の記法として、コンピュータ・プログラミングにおいて、プログラミング言語によっては、定まった数を表す構文が用意されている。例えばC言語やC++において、123 は十進法、0x012abc および 0X345DEF は十六進法、0b0101 および 0B1010 は二進法、0123 は八進法の定数をそれぞれ表し、底の区別は先頭の記号によってなされる。JavaScriptなどでは八進数についてより厳格に、0o または 0O で始まる文法を採用している。より柔軟な記法として、2から36までの底について底が36までに制限されるのは、数値に使える文字種がアラビア数字10文字と[[ISO基本ラテンアルファベット、Smalltalkでは base "r" value、Erlangでは base "#" valueという構文を採用している。base は底を表す十進整数であり、value はその進数法での数値を表す英数字の列である。

2. 適用例
------

2.1. 十進法
--------

数列十進法は最も身近な位取り記数法である。十進法では、十個の数字を用い、一桁にひとつの数字を容れて必要な桁数分を並べて数値を表す。

アラビア数字なら の十個であり、漢数字なら の十個である。以下、アラビア数字を例に説明するが、漢数字の場合も同様である。

十進法ではこれらの数字を列べる事で数を表現する。 例えば、312.02は、 を表す。

2.2. Nが十未満
----------

例えば五進法をアラビア数字で表した場合、使う数字は

の五種類の記号であり、五進法における431.02は、

を表し、これは十進法の116.08にあたる。

注意すべき点は、同じ「431.02」でも五進法のものと十進法のものでは値が異なる。このため、位取り記数法の話をするときには、常に何進法の話であるのかを明示する必要がある。

2.3. Nが十を超過
-----------

十二進法、十六進法、二十進法のように、//N// が十より大きい場合は用いる数字は、アラビア数字だけでは足りなくなる。そこで、十以上の数を表記する「数字」として、ラテン文字のアルファベットの大文字を用いる事が多い。

例えば十六進法であれば、「数字」として

を用い、A、B、C、D、E、Fはそれぞれ十進法の自然数10、11、12、13、14、15に対応する。

従って例えば2F3.A7は

を表し、これは十進法の755.652344にあたる。

3. 可除性
------

有理数を小数で表す際、有限小数になる場合と循環小数になる場合がある。本節では底 N}} の位取り記数法で有理数が有限小数として表される条件について述べる。

一般に、既約分数 sfrac が底 N}} の位取り記数法において有限小数として表されるには、分母 y}} が底 N}} が持つ素因数 の積 になっていなければならないHardy。この条件は分子によらないため、有限小数で表せるかは単位分数で表される有理数に限って調べればよい。

例えば十進法では 1=//N// = 10 = 2⋅5}} のため、ある有理数を既約分数で表した際、分母が 2}} と 5}} 以外に素因数を持たない場合には有限小数となり、それ以外は循環小数となる。

N}} 進有限小数が M}} 進有限小数でもあるには、その有限小数を既約分数で現した際の分母が2つの底 N}}, M}} の冪のいずれの約数にもなる必要がある。特に、すべての N}} 進有限小数が M}} 進有限小数であるには M}} の素因数がすべて N}} の素因数に含まれていなければならない。

4. 表記の一意性
---------

この節では特に断りがない限り十進数について述べるが、他の底についても同様である。

実数の //N// 進表記は一意ではない。

よく知られているように、

1=1.000…=0.999…である。また、以下のように、上位桁に不要な0を付け加えることもできる。

0013=13通常は「0013」のような表記は許さないとする事が多いが、コンピューターなどでは、最大で4桁の整数値であることを示すため、あえて「0013」のような表記をする場合がある。

以上のような例を除くと0以外の実数は一意に表現できる。

しかし、0のみは

「+0」、「-0」の二通りの表記が可能である。これが原因で、コンピューター・プログラムでは0のみ例外処理を求められる場合がある。

また、一般には0は1桁の数とされているが、ルールを優先し1桁の数と認めない場合もある。

表計算ソフトの列名などで用いられている、A, B, ..., Z, AA, AB, ... のような形式は、位取り記数法の一種と考えることができ、かつ0より大きい整数を一意に表せる。

5. 底の変換アルゴリズム
-------------

与えられた非負整数 //T// を、記号を数字として用いた //N// 進表記

で表すには、以下のアルゴリズムを用いればよい。

なお、このアルゴリズムは、 //M// ≠ //N//により//M// 進表記されている //T// を //N// 進表記に書き換えるときに使われる事が多いので、このアルゴリズムを底の変換アルゴリズムと呼ぶ。

入力//T// を受け取る。
//T=0// なら を出力して停止。
iを0に初期化
while{
//T// を //N// で割った商を //T'// 、余りを //k// とし、 とする。
//T// ←//T'//、i←i+1
}
r←i-1
を出力なお、//T// >0に対しては等式

が知られている 。ここでは床関数である。

5.1. 底の変換例
----------

十進法→五進法への変換十進法の 5213 を五進法に置き換える場合、5で割っていき、商が5未満になった時点で止める。余り無しの場合は 0 を明記する。商が5未満になったら、最後の商を先頭にして、最初の余りを末尾にして列べる。

5213 ÷ 5 = 1042 余り 3
1042 ÷ 5 = 208 余り 2
208 ÷ 5 = 41 余り 3
41 ÷ 5 = 8 余り 1
8 ÷ 5 = 1 余り 3
1 ÷ 5 = 0 余り 1から、5213 = 3 + 2 × 5 + 3 × 52 + 1 × 53 + 3 × 54 + 1 × 55 となるので、五進表記では 131323 と表すことができる。また、55 = 3125, 56 = 15625 であるから、55 ≤ 5213 < 56 が成り立っているので、対数を取ると となり、 が分かる。

十進法以外→十進法以外への変換十進法以外のN進法も同様で、例えば38}}に当たる六進法の 50213 を十六進法に置き換える場合も、商が24}} = 10}} を下回るまで24で割っていく。

50213 ÷ 24 = 1522 余り 1
1522 ÷ 24 = 41 余り 14
42 ÷ 24 = 1 余り 13以上より、1, 13, 14, 1の列になり、13}} = 9}}、14}} = A}} なので、十六進法では 19A1 となる。

同値の小数への変換小数を別のN進法に変換する場合には、以下の経過を践む。

変換前と変換後の冪数を列挙する。
小数点以下の元の桁数に合わせて、冪数を掛ける。
端数処理をする。
整数と同じく、冪数を掛けた結果を、変換後のNで割っていく。
変換後のNで割った結果を最後の商→最初の余りの順に列挙する。この列が同値の小数となる。十進数0.531441 → 十二進数六桁

十進数 1000000 → 2985984
531441×2.985984 = 1586874.322944
1586874.322944 → 1586874
1586874÷12 = 132239 余り6
132239÷12 = 11019 余り11
11019÷12 = 918 余り3
918÷12 = 76 余り6
76÷12 = 6 余り4
11}} = B}} なので、6463B6}} を列べる。以上より、十進数0.531441 は、十二進数では約0.6463B6 となる。

十進数0.124053 → 六進数九桁

十進数 1000000 → 10077696
124053×10.077696 = 1250168.42189
変換前の小数が六桁なので、乗数も小数点以下を六桁にする。
1250168.42189 → 1250168
1250168÷6 = 208361 余り2
208361÷6 = 34726 余り5
34726÷6 = 5787 余り4
5787÷6 = 964 余り3
964÷6 = 160 余り4
160÷6 = 26 余り4
26÷6 = 4 余り2
42443452}}を列べる。分母が 10077696}} = 1000000000}} なので、小数点以下は9桁になり、先頭に0が1つ加わる。よって、十進数0.124053 は、六進数では約0.042443452 となる。

6. 複数の底の混在
----------

十進法では、機械的に十倍、百倍、千倍、一万倍…の順で増える。同じく、十二進法では、機械的に十二倍、百四十四倍、千七百二十八倍、二万七百三十六倍…の順で増える。

しかし、底を2つに分ける場合がある。十進法に対して、二・五進法では二と五の2つの底があるので、桁が上がる度に五倍→二倍→五倍→二倍…と交互になり、「十の冪数」と「十の冪数の五倍」が交互に現れる。これはそろばんと同じく一桁が「一の位」4つと「五の位」1つで構成される方法だが、計算機にも応用されている。

時間：

秒、六十進法、分、六十進法、時、二十四進法、日、七進法、週

秒、六十進法、分、六十進法、時、二十四進法、日、三十進法、月、十二進法、年、十進法、十年紀、十進法、世紀、十進法、千年紀

バビロニアの六十進法もそろばんに似た方法で、一桁が「一の位」9つと「十の位」5つで構成されており、整数は十倍→六倍→十倍→六倍と交互になり、小数は六分の一→十分の一→六分の一→十分の一と交互になる。この方法では、整数第二位は「六十の位」と「六百の位」に分かれ、整数第三位は「三千六百の位」と「三万六千の位」に分かれ、小数第一位は「六分の一の位」と「六十分の一の位」に分かれ、小数第二位は「三百六十分の一の位」と「三千六百分の一の位」に分かれている。

階乗進法

これら二・五進法や六十進法のように複数の底が設定されている場合には、" : " などの区切り符号を付ける。例えば、六十進法で十進法を補助とする場合には、58 → 59 → 1:00 → 1:01 → 1:02 …の順に数列が進む。

日本の通貨には、昇順で一円→五円→十円→五十円→百円→五百円→千円→五千円→一万円があるので、通貨を一つの単位と見れば、これは前述の二・五進法である。この配列を見ると、一、十、百、千、一万が十の冪数であり、五、五十、五百、五千が「十の冪数の五倍」である。

7. 英語表記
-------

「底 //N// 」を英語で、base // という。特定のNに関しては倍数接頭辞を基に名称がついているが、名称の付け方は不規則である。通常、接尾辞が -ary である語は、ラテン語の -arius  に由来して、「N 個一組」「N を単位とする」「N 個から成る」を意味する語である。一方、接尾辞が -imal である語は、ラテン語の -imus に由来して、「第 N」「N 分の一」を意味する語である。

以下は「底 //N// 」、もしくはより明解に「//N// 個一組」「//N// を単位とする」「//N// 個から成る」という意味の形容詞である。

二：binary
三：ternary
四：quaternary
五：quinary
六：senary
七：septenary
八：octonary, octal
九：nonary
十：denary, decimal
十二：duodenary, duodecimal
十五：quindenary, quindecimal, pentadecimal
十六：sedenary, sedecimal, hexadecimal
十八：octodenary, octodecimal
二十：vicenary, vigesimal
二十四：tetravicenray, tetravigesimal
三十：tricenary, trigesimal
三十二：duoreicenary, duoreigesimal
三十六：hexatrecenary, hexatrigesimal
六十：sexagenary, sexagesimal

これらを使い、a base-two numberで「二進数」、the base-two numeral systemで「二進法」を表す名詞となる。 同様にa binary number、the binary numeral systemでもそれぞれ「二進数」、「二進法」を表す名詞となる。他の底も同様。

8. //p//進数
----------

//N// 進表記と関連が深い概念として、素数 //p// 毎に定まる //p// 進数というものもある。 名称は本稿で解説している//N// 進表記の別名である//N// 進数と同一であるものの、別概念ではある。ただし両者は非常に関連があり、整数の //p//進表記を無限桁の自然数の範囲に拡張したものが //p//進整数で、さらにそこに有限桁の小数部分を許したものが //p//進数である。ただし「無限桁の整数」は本稿で扱う普通の数とは異なる。

9. 注釈
-----

10. 出典
------

11. 参考文献
--------

12. 関連項目
--------

総合
広義の記数法
コンピュータの数値表現、エンディアン
命数法
キリバン
倍数接頭辞：英語で記数法の底となるNを表すdecimal、binaryなどの接頭辞deci-、bi-などに関する項目通常のN進法
二進法 
三進法 
四進法 
五進法 
六進法 
七進法 
八進法 
九進法 
十進法 
十一進法 
十二進法 
十三進法 
十五進法 
十六進法 
十八進法 
二十進法 
二十四進法
三十進法 
三十二進法
三十六進法
六十進法 特殊なN進法
一進法
二・五進法
二進化十進表現
六十進法：sexagesimal
E進法
黄金進法
六十四進法：Base64
八十五進法：Ascii85
階乗進法
平衡三進法
その他
各国語の数字の一覧