1. 「進数」って、なに?
1. 進数とは、どこで次の位に進むかの決まり
1. 「進数」とは何か ── 基数を変えると数の見え方が変わる
ホームページで あかい 色を あらわす ことばは、「#FF0000」と 書きます[5]。コンピューターの 中では、192が 「11000000」に なります[4]。どちらも、数の 書き方の 1つで、「進数」と いいます。まず、いつもの 10進数から 見て みましょう。
10進数は、10に なると、となりの 「くらい」に すすむ 数え方です。9の つぎは、「10」ですね。
たとえば、10こ たまったら ふくろに 入れて、ふくろの 数を かぞえる、と 考えて みましょう。ふくろが 10こ たまったら、もっと 大きな ふくろに 入れます。これが、くらいが あがる、と いう ことです。
ただし ほんとうは、ふくろに 入れる 数は 10とは かぎりません。2こで 入れる 数え方が 2進数、60こで 入れる 数え方が 60進数です。
10進数の0.1は、2進数で書くと、割り切れずに、同じ並びがずっと続きます[4]。ウェブページの色の指定「#FF0000」が赤を表すのも、進数のしくみのおかげです[5]。どうしてそうなるのか、まず、「進数」とは何かから見ていきます。
10で位が上がる
「10進数」は、0〜9の10個の数字を使い、10になると次の位に進む数え方です。たとえば365は、100が3つ、10が6つ、1が5つで、3×100+6×10+5×1です。
「N進数」とは
位が上がる数をNにした数え方を、「N進数」といいます。このNを「基数」(または「底」)といいます。N進数では、0からN−1までの数字を使い、Nになると次の位に進みます[1]。
たとえば2進数なら、数字は0と1だけで、2になると位が上がります。2進数の「10」は、10進数の2のことです。
では、10進数のほかに、どんな進数が使われているのでしょうか。
10進数の0.1は、2進数では循環小数になる[4]。ウェブの色指定「#FF0000」が赤とわかるのは、16進数だからだ[5]。どちらも、基数が変わると、数の見え方が変わる例だ。まず、基数とは何かを確認する。
では、基数とは何か。位取り記数法では、何進法かを決める数Nを「基数(きすう)」ないし「底(てい)」といい、N種類の数字を使って数を表す。一桁にひとつの数字を入れて、必要な桁数分を並べる。数字は、0からN−1までの整数に対応し、Nになると次の桁へ進む[1]。
たとえば、10進法では、アラビア数字の0〜9の10個を使う。365は、3×10²+6×10+5×1である。同じ位取りのしくみで、基数だけを変えたものが、2進法(0と1)、16進法(0〜9とA〜F。AからFが10から15を表す)、60進法などだ[1]。
つまり、進数のちがいは、数の「大きさ」のちがいではなく、同じ数を書き表すときの「位の上がり方」のちがいである。では、どんな進数が、どこで使われているのだろうか。
2. 時間は、なぜ 12や 60が 出て くるの?
2. 60進数と12進数 ── 割り切れる数が便利だった
2. 時計に60や12が残ったのはなぜか ── 約数の多さと、暦
時計の 「分」と「びょう」は、60に なると 1つ 上の くらいに すすみます。びょうは 60こで 1分、分は 60こで 1時間に なります。時間では、60に なると つぎの たんいに すすみます。これは 60進数です。
60は、2や 3、4、5、6で わりきれます。たとえば、60こを 3人で おなじ 数ずつ わけられます。わけやすいので、べんりだったのかも しれません。ただし ほんとうの わけは、はっきり しません。
ダース(12こ)や、時計の 12時間、1年の 12か月にも、12が 出て きます。つごうの よい 数が、いまも つかい わけられて います。12も、2、3、4、6で わりきれる 数です。
60進数は、古代バビロニアから
時計の「分」と「秒」は、60になると位が上がる60進数です[1]。60進数の考え方は、古代メソポタミアのバビロニアの人たちが使った位取りの数え方にさかのぼるとされます。2種類の楔形の記号を組み合わせて、1〜59を書き表しました[2]。
60が選ばれた理由には、いくつかの説があります。60は2、3、5で割り切れるので、分数を有限の形で表せる場面が多かった、という説明があります。ほかに、指で数える方法から、12進法と5進法を使う2つの文化が混ざったため、天文や図形の考え方から、といった説もあり、決着していません[2]。
いまも、時間(60秒、60分)と、角度(1周は360度)に、60進数が残っています[2]。
12進数は、1年の月の数から?
12は、1と12のほかに2、3、4、6で割り切れるので、3等分にも4等分にもしやすい数です。ダース(12個)、グロス(144個)、時計の文字盤の12(半日)、1年の12か月、1フィート=12インチ、干支の12支など、身近なところに使われています[3]。
起源には諸説があり、1年に満月と新月がほぼ12回あることや、メソポタミアの暦との関係で説明されることがあります[3]。
このように、割り切れる数が多いなど、使いやすい数が、時計や暦などの用途で残り、いまも使い分けられています。では、コンピュータが使う2進数は、どうして選ばれたのでしょうか。
時計の「分」や「秒」に、なぜ60が出てくるのか。時刻や角度の単位には、1から6までの数で割り切れる60を基数とする60進法が使われている[1]。セント・アンドルーズ大学のMacTutor(数学史のサイト)によると、60進法はバビロニア人がシュメール人やアッカド人から受けついだもので、位取りの表記を発展させた「最大の業績」だとされる。60種類の記号は要らず、楔形の2つの記号(1を表すものと10を表すもの)を組み合わせて、1つの位の59通りを表した[2]。
ところが、このバビロニアの位取りには、はじめ、空位を表すゼロの記号がなく、1と60が区別できなかったという。前後の文脈で判断していて、のちのバビロニア人は、空位を示す記号を作った。60が2・3・5で割り切れるため、10進法より多くの分数を有限の形で表せることが、60進法が採られた一因だという見方もあるが、議論がある。ほかに、指で数える方法から、12進法と5進法の文化の混合から、天文学や図形の考え方から、という提案があり、MacTutorの執筆者は、一つの見方として、意図的な選択というより、数え方の習慣のなかから自然に生まれたのだろう、と述べている[2]。それでも60進法は消えず、いまも時間(60秒・60分)と角度(360度)に残っている[2]。
では、もう一つの数、つまり時計の文字盤や暦に出てくる数はどうか。12進法は、12を基数とする位取り記数法で、0〜9に加えて、10と11を表す2つの数字が要る。この数の利点は、分けやすさにある。1とその数以外に2、3、4、6の4つの約数があり、3等分と4等分がしやすいとされるからだ。この数は、今も身近なところに残っている。例は、ダース(12)とグロス(144)、1年の12か月、1フィート=12インチ、かつてのイギリスの通貨の12ペンス=1シリング、干支の12支などだ[3]。では、なぜこの数が選ばれたのか。起源には諸説があり、1年にほぼ12回ある満月と新月や、メソポタミアの暦との関係で説明されることがある[3]。
なお、時計の文字盤の12(半日の時間数)と、分・秒の60は、別の由来をもつ数え方である。このように、割り切れる数が多いなど使いやすい数が、時計や暦などの用途で残り、いまも使い分けられている。では、コンピュータがなぜ2進法を使うのかを見る。
3. コンピューターは、どうして 2進数?
3. 2進数は、電気の「入・切」と相性がいい
3. コンピュータはなぜ2進法なのか ── デジタル回路、ライプニッツ、シャノン
2進数は、0と 1だけで 数を あらわします。コンピューターの 中の でんきの 回路は、でんきが「とおっている」か「とおっていない」かのような、2つの じょうたいを つかいます。だから、0と 1で あらわす 2進数が ぴったり なのです。
0か 1かを あらわす ひとつぶんを「ビット」と いいます。ビットを 8こ あわせた ものが「バイト」です。
スイッチが 入って いるのが 1、切れて いるのが 0、と 考えると わかりやすいです。ただし ほんとうの コンピューターの スイッチは、とても 小さな 部品で、目に 見えません。
でも、2進数は 0と 1が ながく つづくので、人には よみにくいのです。たとえば、192は 11000000と、8けたに なります。どう すれば よみやすく なるでしょう。
二つの状態だけを使う
コンピュータのデジタル回路は、物理的な状態を「電圧が高いか低いか」のような2つの状態だけに絞って扱います。だから、0と1だけの2進数がぴったり合います[4]。
2進数の1桁を「ビット」、8ビットを「バイト」といいます[4]。10進数の192は、2進数では11000000です[4]。
2進数の歴史
2進数のような考え方は、古くからありました。紀元前200年ごろのインドのピンガラが考えた、詩のリズムを数で表す方法は、現在知られている最古の2進法の記述の一つとされます。中国の易経の八卦(3ビットに相当)や六十四卦(6ビットに相当)も、あとから2進法の並びとして見られることがあります[4]。
17世紀に、数学者のライプニッツが、0と1だけで数を表す2進法をまとめ、易経の八卦に000〜111を対応させたとされます[4]。1937年には、クロード・シャノンが、リレーのようなスイッチの回路が、ブール代数で設計できることを示しました。これがコンピュータの理論の土台になりました[4]。
0.1が2進数で割り切れない
面白いことに、10進数の0.1は、2進数では0.0001100110011…と、同じ並びがずっと続く小数になります[4]。
2進数には、192が11000000になるように、桁が長くなりがちで、人間には読みまちがえやすい、という弱点もあります。この長い並びを、どうすれば読みやすくできるでしょうか。
コンピュータの中で、数が0と1だけで表されるのはなぜか。2進法は、底を2とする位取り記数法で、0と1だけで数を表し、位の値は2のべき乗(…1/4、1/2、1、2、4…)である。デジタル回路では、物理現象を「電圧の高低」「磁極のNとS」のような二状態に縮退させて扱うため、0と1で表す2進法は相性がよいのだ[4]。2進数の1桁がビット、8ビットがバイトである[4]。
この考え方は、コンピュータより古い。インドのピンガラ(紀元前200年ごろ)が詩のリズムを数学的に表す方法を考えたものが、現在知られている最古の2進法の記述の一つとされる。中国の易経の八卦(3ビット相当)と六十四卦(6ビット相当)も、あとの時代に2進法の並びとして解釈されることがある。17世紀にライプニッツが、数学的に2進法を確立して「Explication de l'Arithmétique Binaire」(2進算術の解説)を発表し、易経の八卦に000〜111を対応させたとされる[4]。
そのうえで、コンピュータの理論と結びついたのが、1937年のクロード・シャノンの論文である。リレーのようなスイッチング素子を使った回路の設計が、ブール代数で行えることを示したとされる[4]。
ただし、2進法にも困る点がある。その例が、小数だ。10進数の0.1は、2進数では0.0001100110011…の循環小数になる[4]。人間にとって「切りのよい数」でも、基数が変わると割り切れなくなる。また、192が11000000になるように、2進数は桁が長くなりがちで、人間には読みまちがえやすい。この長い並びを、どうすれば読みやすくできるのだろうか。次の章で見ていく。
4. 16進数は、なにに つかうの?
4. 16進数は、2進数を短く書くための道具
4. 長い2進数をどう読みやすくするか ── 16進法と、色の指定・メモリの番地
ながい 2進数は、4けたずつ に 区切ると、よみやすく なります。11000000は、1100と 0000です。
4けたの 0と 1の ならべかたは、0000から 1111まで、ぜんぶで 16とおり あります。この 16とおりを ひとつずつの もじで あらわす のが、16進数です。
16進数は、0から 9までの 数字に、Aから Fまでの もじを たして、16こ つかいます。Aは 10、Fは 15です。1100は C、0000は 0なので、11000000は 「C0」と 書けます。
ホームページの 色を きめる 「#FF0000」のような ことばにも、16進数が つかわれて います。
2進数の4桁が、16進数の1桁
長い2進数は、4桁ずつに区切ると読みやすくなります。11000000は、1100と0000です。4桁の0と1の並びは、0000から1111まで、全部で16通り(2×2×2×2)あります。この16通りを1文字ずつで表せば、8桁の2進数が2文字に縮みます。そのために必要な16個の数字が、16進数です。たとえば1100はC(12)、0000は0なので、11000000は「C0」と書けます。
16進数は、0〜9に、A〜F(10〜15)を加えた16個の数字を使います。2進数の4桁が16進数の1桁に対応するので、2進数より短く表せます。1バイト(8ビット)は、16進数の2桁で書けます[5]。
どこで使われているか
ウェブページの色は、「#RRGGBB」という形で、赤・緑・青の強さを16進数で指定します[5]。「FF」は10進数の255で、1バイトで表せる最大の値です。「#FF0000」は、赤の強さが最大で、緑と青がゼロの色、つまり赤です。
コンピュータのメモリの内容を表示するときにも、16進数が使われます[5]。プログラミングでは、0x1000のように、数字の前に「0x」を付けるなど、言語によって書き方がちがいます[5]。
では、進数どうしは、どうやって変換するのでしょうか。
答えは、4桁ずつに区切ることだ。区切った並びには、何通りの形があるだろうか。0と1の並びは、0000から1111まで16通り(2⁴)ある。この全部を1つずつの数字で表す位取り、つまり基数16の16進法が使われる。たとえば長い並びも、1100(C)と0000(0)に分ければ、「C0」と短く書ける。
その数字には、何を使うのか。16進法は、0〜9に加えて、A〜F(10〜15)を数字として使う。2進表記の4桁が16進表記の1桁で表せるので、2進表記より短く書ける。1バイト(8ビット)は、16進の2桁で表示できる[5]。
この短さが役に立つ実用例が、ウェブの色指定(#RRGGBB)や、メモリの内容(アドレス)の表示である。ただし、書き方は、C・Java・Perlでは0x1000、MicrosoftのBASICでは&h1000、Pascalでは$1000、アセンブリでは1000hと、言語や処理系ごとにちがう[5]。
16進法の記号は、はじめから決まっていたわけではない。1950〜1960年代の初期のコンピュータでは、各社が異なる記号(u〜z、K〜Lなど)を使っていた。1968年にBruce Alan Martinが新しい数字記号を提案したが、賛同者は少なかった、とされる[5]。hexadecimalという言葉の最初の記録は、1954年のMerriam-Webster's Collegiate Dictionaryに見られるとされる[5]。
では、10進数・2進数・16進数は、どうやって書きかえるのだろうか。
5. 進数は、かえられるの?
5. 変換のしかた ── 割り算と、4桁ずつのまとめ
5. 書きかえるにはどうするか ── 10進⇔2進⇔16進の変換
はい、かえられます。おなじ 数を、べつの 進数で 書くだけです。
ゆびを 立てて いるのを 1、おって いるのを 0、と します。右手の 5本の ゆびで、0から 31まで かぞえられます。おやゆびは 1、ひとさしゆびは 2、なかゆびは 4、くすりゆびは 8、こゆびは 16と、ばいに して いきます。たとえば、ぜんぶの ゆびを 立てると、ぜんぶ たして 31、おやゆびだけ 立てると 1です。
ただし ほんとうの コンピューターは、ゆびでは なく、でんきの スイッチで 0と 1を あらわして います。
10進数から2進数へ
10進数を2で割っていき、余りを記録して、最後に余りを逆の順に読みます。たとえば13なら、13÷2=6余り1、6÷2=3余り0、3÷2=1余り1、1÷2=0余り1。余りを逆に読むと、1101です[1]。
2進数から10進数へ
2進数の各桁に、その位の値(1、2、4、8…)をかけて足します。1101なら、8+4+0+1=13です[1]。
2進数と16進数
2進数を4桁ずつに区切ると、そのまま16進数の1桁になります。11000000は、1100と0000に分けて、C(12)と0で、16進数のC0です。これは10進数の192です[5]。10進数の36864は、16進数では9000です[5]。
ここまで見た進数は、どれも「位取り」という同じしくみでした。では、その位取りと、ゼロは、いつ、どこで生まれたのでしょうか。
数を別の進法へ書きかえるには、決まった手順がある。まず、10進数から2進数へ変えるには、2で割り続け、余りを記録する。逆向きの手順も単純だ。2進数から10進数へ変えるには、各桁に対応する2のべき乗を掛けて合計する[1]。では、例で確かめてみよう。10進数の13は、13÷2=6余り1、6÷2=3余り0、3÷2=1余り1、1÷2=0余り1で、余りを逆順に並べた1101になる。逆に戻すと、1101は8+4+0+1=13だ。
では、16進数への変換はどうか。こちらは、もっと簡単である。前に見た並びで確かめよう。10進数の192は、2進数で11000000だ[4]。4桁ずつが1桁に対応するので、1100(12=C)と0000(0)に分けて、C0になる[5]。別の例として、10進数の36864は、16進数で9000である[5]。
ただし、変換の途中で、割り切れない小数が出てくることがある。その例が、0.1を2進数にしたときの循環小数だ[4]。ここまで見た進数は、どれも同じ位取りのしくみだった。では、その位取りとゼロは、いつ、どこで生まれたのか。
6. ほかにも、いろいろな 進数が あったの?
6. マヤの20進数と、位取りの始まり
6. 位取りとゼロはどこで生まれたのか ── マヤの20進法と、資料の食いちがい
ここまで 出て きた 数え方は、どれも 「くらい」が あがる しくみでした。この くらいどりと 「0」は、いつ、どこで うまれたのでしょう。まずは、むかしの マヤの 数え方から 見て みましょう。
くらいが あがる 数は、国や 時代に よって ちがいました。むかしの マヤの 人たちは、20に なると くらいが あがる 20進数を つかって いました。点が 1、たてぼうが 5、貝の かたちが 0です。
「0」を つかった くらいどりの 数え方は、いつ、どこで はじまったのかは、しりょうに よって ちがって いて、はっきり しません。
位が上がる数(基数)は、地域や文化によってちがっていました。ここでは、まずマヤの20進数を例に見て、そのあと、位取りとゼロの始まりを追います。
マヤは20進数
古代マヤの人たちは、点を1、棒を5、貝の形を0として、下から上へ、20ずつ位が上がる20進数を使いました。たとえば33は、「20が1つ、1が13」で、点1つの下に、棒2本と点3つを並べて書きます[6]。
暦を数えるときは、2番目の位は17までで、3番目の位は20×20=400ではなく、18×20=360を表すように、少し変えて使いました。1年の長さに近づけるためだと説明されます[6]。
位取りとゼロは、どこで始まった?
日本語版Wikipediaは、位取り記数法は古代中国に由来し、紀元前14世紀の商の時代に10進法が使われ、紀元前4世紀にはゼロを空位として書く位取りがあった、と書いています[1]。ヨーロッパで最も古い10進法の文書は、976年のスペインの写本です[1]。
いっぽう、ゼロを最初に発明したのがマヤなのか、それより前にこの数え方を使っていたオルメカ文明なのかは、研究者の間で議論があります[6]。最初のゼロや位取りが、どこで生まれたのかは、資料によって説明がちがい、このメモでは決められません。
位が上がる数(基数)は、地域や文化によってちがった。たとえばマヤの数は、20を基数とする位取りの20進法で、点(1)、棒(5)、貝(0)の3つの記号を使い、下から上へ20のべきの位を並べた。この数え方で数を書くと、どうなるか。33は、(1×20)+13で、点1つの下に、棒2本と点3つを重ねて書く[6]。
ただし、暦を数えるときは、ふつうの20進法とは少しちがった。暦の長期計算(ロング・カウント)では、2番目の位は17までしか使わず、3番目の位の値は20×20=400ではなく18×20=360になる、修正された20進法が使われた。これは、太陽年の近似に合わせたものと説明される。
では、ゼロと20進法を発明したのは、マヤなのか。最も古い長期暦の日付は、紀元前36年のチアパスの石碑に見られる。ところが、この日付がマヤ圏の外で見つかっていることから、発明したのがマヤなのかオルメカなのかは、研究者の間で議論がある[6]。
位取り記数法そのものの起源も、一つには決まらない。日本語版Wikipediaは、古代中国に由来し、中国では紀元前14世紀の商時代にすでに10進法が使われ、紀元前4世紀にはゼロを空位として書く位取り記数法があったと書く。ヨーロッパで最古の10進法の文書は、976年のスペインの手稿本だとされる[1]。一方、バビロニアの60進法にも、位取りとゼロに近い記号の工夫がある[2]。このように、「位取りとゼロがどこで生まれたか」は、資料によって説明がちがい、このメモは、どれかに決めない。
じぶんでも やって みる
自分でも調べてみたくなったら
自分でも調べてみたくなったら
おうちの 人と いっしょに、じぶんの たんじょうびや 年れいを、2進数に かえて みましょう。
あんぜんな ばしょで できる こと
- ゆびで 2進数を かぞえる。右手の 5本の ゆびで、0から 31まで かぞえて みましょう。
- 「#FF0000」を けんさくして、どんな 色か 見て みる。16進数の ならびで、色を きめて います。
きょう 知った ことを ひとつ だけ ノートに 書いて おきましょう。「2進数は 0と 1だけ」だけでも いいです。
このメモの内容は、自分で計算して確かめられます。
今日できること
- 自分の年齢を、2進数に直してみる。2で割って、余りを逆に読むだけです。答えは、2×の位の足し算で、もとの数に戻せます。
- 「#FF0000」で検索して、色を確かめる。赤になる理由を、「FFは255」を手がかりに、説明してみましょう[5]。
- 0.1を2進数の小数で書いてみる。0.1に2をかけて、整数の部分を取り出す、をくり返すと、同じ並びが続くのが見えます[4]。
気になった言葉を1つだけ書いておくと、あとで調べる入口になります。「基数」や「ビット」だけでも十分です。
気になったことを、自分で確かめる入口にしてほしい。
手を動かして確かめる
- 0.1を2進数で書いてみる。0.1に2を掛けて、整数部分を取り出す操作をくり返すと、0.0001100110011…と、同じ並びが続く理由を確かめられます[4]。
- ライプニッツの論文「2進算術の解説」を探す。易経との関係がどう書かれているかを、原典やその翻訳・解説で確かめましょう。発表の年も、原典で確認できます。
- MacTutorのバビロニアの数の解説を読む。楔形の記号の図と、60進法が選ばれた理由の諸説が載っています[2]。
気になった数字や言葉を1つだけノートに記録しておきましょう。「1101=13」という一文でもかまいません。
しらべた もとの じょうほう
参考にした情報源
参考にした情報源と、その使い方
この記事は、下にあげた公開情報をもとに書いています。文章や図を無断で転載してはいません。もっと正確に知りたいときは、必ず下の出典にあたってください。リンク先の内容や、リンク先で起きたことについて、当サイトは責任を負いません。
出典について:数学史のサイト(セント・アンドルーズ大学 MacTutor)と、日本語版・英語版Wikipediaにたよっています。英語の資料は、内容を日本語で説明しています。このメモは、これらの団体のものではなく、個人のまとめです。
- 日本語版Wikipedia「位取り記数法」。 https://ja.wikipedia.org/wiki/位取り記数法 (基数・位取りの定義、進法の種類、変換の方法、位取りの歴史)
- MacTutor History of Mathematics「Babylonian numerals」(セント・アンドルーズ大学)。 https://mathshistory.st-andrews.ac.uk/HistTopics/Babylonian_numerals/ (バビロニアの60進法の記号と、60が選ばれた理由の諸説。英語の資料)
- 日本語版Wikipedia「十二進法」。 https://ja.wikipedia.org/wiki/十二進法 (12進法が便利な理由、身近な例、起源の説明)
- 日本語版Wikipedia「二進法」。 https://ja.wikipedia.org/wiki/二進法 (2進法の歴史、デジタル回路で使われる理由、ビットとバイト、変換の例)
- 日本語版Wikipedia「十六進法」。 https://ja.wikipedia.org/wiki/十六進法 (16進法の定義、色の指定とメモリの表示、書き方の例、歴史)
- Wikipedia(英語版)「Maya numerals」。 https://en.wikipedia.org/wiki/Maya_numerals (マヤの20進法と暦の修正、ゼロの起源をめぐる議論。英語の資料)
なおした ところ
更新履歴
更新履歴(改版の記録)
- 初版を公開。
- 文章のリズムを整えるため、「確かめていない」「見つからなかった」などの言い方を整理しました。書いてある事実は変えていません。
- 章と章のつなぎ、出典を主語にした言い方、最後の「自分でも調べてみたくなったら」を、読みやすく整えました。書いてある事実は変えていません。
- 中学生むけの文章を、問いとつなぎのある書き方に直した(事実・数字・出典は変えていない)。
- 低学年むけの導入・時間の単位・電気の説明、中学生むけの基数の定義と「最適」の言い方、60が割り切れる数の言い方を、分かりやすく直しました(先生の目での読み直しによる)。
このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。