二進法
二進法(にしんほう)とは、二 を底(てい、基(base)とも)として、底の冪の和で数を表現する方法である。
英語でバイナリ (binary) というが、これはラテン語「binarius」に由来する語で、「binary」と「binarius」は本来「二個一組」「二つから成る」を意味する語である(用例:バイナリ空間分割)。
Contents
記数法
二を底とする位取り記数法を二進記数法と呼ぶ。混乱を防ぐために二進法であることを示す場合には、下付の 2 を用いて (110)2 などとすることがある。二進記数法で
- [math]a_Na_{N-1}\ldots a_1a_0.a_{-1}a_{-2}\ldots[/math]
(各位の値 ai は 0 か 1)と表される数は二進法の定義から、
- [math]a_N2^N + a_{N-1}2^{N-1} + \cdots + a_1 2 + a_0 + {a_{-1}\over 2} + {a_{-2}\over 2^2} + \cdots [/math]
という数を表している(ここで 2 は十進法の 2 である)。
「二進記数法で記された数」という意味として二進数という語が使われることがある。しかし、二進数という数の体系(たとえば「整数」といったような)があるわけではない。また、p進数における p = 2 の場合とは全く異なる。
二進法を用いれば 0 と 1 の二種類の数字のみで零を含む任意の自然数が表現可能であり、負号と合わせることで整数が表現可能である。更に小数点を合わせて 4 種類の記号のみで実数の表現が可能である。
足し算表
0 | 1 | |
---|---|---|
0 | 0 | 1 |
1 | 1 | 10 |
デジタル機器での使用
電子式コンピュータの電子回路などのディジタル回路(ディジタル論理回路)、磁気ディスク等の記憶メディアでは、電圧の高低、磁極の N/S など、物理現象を二状態のみに縮退して扱う(離散化などと言う[注 1])ので、それに、真と偽の2つの値(2値の真理値)のみを使用する二値論理(しばしば、電子的には H と L、論理的には T と F という記号が使われる)をマッピングする。さらにそこで数値を扱うには、それに二進法をマッピングするのが最適である。もし、十進法を用いようとすると十種類の状態が必要であるが、それだと2の冪ではないので都合が悪い。二進化十進表現を用いたり、電卓やIBM の POWER のように十進法による直接演算機能を持つコンピュータもあるが、回路としては二値方式(二値論理方式)である。
多くの応用で見られるように桁数が有限の場合は、数学的に言うなら「有理数の部分集合」が表現されているわけであるが、通常は「有限精度の実数」が表現されている(数学的には、それはもはや実数ではないが)と解釈される。
負の数の扱い
2種類の記号のみで、負の範囲の値(負の範囲の整数)も扱うには、広く一般的に用いられている方法は、最上位ビット(MSB)の重みを、2Nではなく −(2N) であるとするものである(2の補数を参照)。この方法は、そのビットパターンが、加減(及び、乗)の演算において特別な処理が不要なものになる、という特長を持つ。ただし、溢れ(オーバーフロー)の扱いが違ってくる(これは、例えばx86プロセッサにおける、キャリーフラグとオーバフローフラグの違いのことである(ステータスレジスタ#キャリーとオーバーフローを参照))。また固定長の場合に表現可能な範囲が、最小の値(負の側の絶対値が最大の値)のほうにひとつはみ出している、という扱いが面倒な場合がある特徴があって、たとえば8ビットで表現可能な範囲は −128, −127, 〜 −2, −1, 0, 1, 〜 126, 127 というようになっている。これに関しては、例えばC言語の標準規格のように、他の表現法も考慮し、全ての符号付き固定長のデータ型は、signed char であれば −128 までではなく −127 まで、などといった仕様になっている、といった場合がある。
十進法から二進法への変換方法
「十進法から二進法への変換方法」などといったものを考える必要はない。どちらも数の「表現法」に過ぎないのだから、単に「表現法 → 数 → 表現法」といったようにして変換すれば良いのである。
十進法との対応
十進表記 | 二進表記 |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 | 1111 |
16 | 10000 |
命数法
二進命数法とは、2 を底とする命数法である。真の二進命数法では、2n に対応する数詞があり、数はそれらの和で表される。自然言語では、このような命数法はパプアニューギニアのメルパ語[1] (Melpa) でのみ知られている[2]。
メルパ語 | |
---|---|
1 | tenta |
2 | ralg |
3 | raltika |
4 | timbakaka |
5 | timbakaka pamb ti |
6 | timbakaka pamb ralg |
7 | timbakakagul raltika |
8 | engaka |
9 | engaka pamb ti |
10 | engaka pamb ralg pip |
通常、二進法の数詞を持つとされるものは二つ組で数える体系であり、乗算が含まれないため、真の二進法ではない。以下にパプアニューギニアの南キワイ語[3] (Southern Kiwai) およびシッサノ語[4] (Sissano) の数詞を示す[2]。
南キワイ語 | シッサノ語 | |
---|---|---|
1 | neis | puntanen |
2 | netewa | eltin |
3 | netewa nao | eltin puntanen |
4 | netewa netewa | eltin eltin |
5 | netewa netewa nao | eltin eltin puntanen |
その他
「パイント」「クォート」「ガロン」といった単位がある帝国単位#体積(一般的ではないが、より細かくこれらの間を二進的に埋める単位もある)が、コンピュータ以前のものとしては珍しく二進的である。
歴史
中国には古くから易の八卦や六十四卦があり、それぞれ 3 ビットと 6 ビットに相当している。易経の六十四卦の配列は対応する整数の順になっていて、それらを 1→2→4→8→16→32→64 と進展させる「加一倍の法」を11世紀の儒学者邵雍が考案した。ただし、彼らがそれを整数(ないし、数)に対応するとして理解していたという証拠はない。その配列はそれぞれが二種類の値をとる要素の 6 タプルを辞書式順序に並べたものと見ることもできる。
インドの学者ピンガラ (Pingala, 紀元前200年頃) は韻律を数学的に表現する方法を考案し、それが現在知られている最古の二進法の記述の一つとされている[5][6]。
同様の二進法的組合せの使用は、アフリカのヨルバ人が行っていた占い Ifá にもあり、中世ヨーロッパやアフリカのジオマンシーにも見られる。2 を底とする体系はサハラ以南のアフリカでジオマンシーに長く使われていた。
1605年、フランシス・ベーコンはアルファベットの文字を2種の記号の列で表す体系を論じ、任意の無作為なテキストで微かに判別可能なフォントの変化に符号化できるとした。一般理論として彼が指摘した重要な点は、同じ方法をあらゆる物に適用できるという点であり、「2種類の異なる状態をそれらの物で表現できればよく、鐘、トランペット、光、松明、マスケット銃など同様の性質があればどんなものでもよい」とした[7]。これをベーコンの暗号と呼ぶ。
数学的に二進法を確立したのは17世紀のゴットフリート・ライプニッツで、"Explication de l'Arithmétique Binaire" という論文も発表している。ライプニッツは現代の二進法と同じく、1 と 0 を使って二進法を表した。ライプニッツは中国愛好家でもあり、後に「易経」を知って、その六十四卦に 000000 から 111111 を対応させ、彼の賞賛してきた中国の哲学的数学の偉大な成果の証拠だとした[8]。
1800年代中頃、イギリスの数学者ジョージ・ブールがブール代数(ブール論理)により、二進的な数(ここで言う「数」は、数学的な広義の意味であり、普通の二進法の対象である、数値という意味ではない)の代数による命題論理の形式化を示した。
1936-1937年の中嶋章と榛沢正男による「継電器回路に於ける単部分路の等価変換の理論」、1937年のクロード・シャノンによる "A Symbolic Analysis of Relay and Switching Circuits" により相次いで、リレーのようなスイッチング素子による回路(ディジタル回路)の設計がブール代数によって行えることが示され、1940年代に始まり今日まで続くコンピュータの理論の基礎のひとつとなっている。
脚注
注釈
- ↑ 量子化とも言うが、量子物理におけるいわゆる量子のような意味(重ね合わせ状態など)ではない。
出典
- ↑ Gordon, Raymond G., Jr., ed. (2005), “Melpa”, Ethnologue: Languages of the World (15 ed.) . 2008閲覧.
- ↑ 2.0 2.1 Lean, Glendon Angove (1992). “TALLIES AND 2-CYCLE SYSTEMS”, Counting Systems of Papua New Guinea and Oceania. Ph.D. thesis, Papua New Guinea University of Technology.
- ↑ Gordon, Raymond G., Jr., ed. (2005), “Kiwai, Southern”, Ethnologue: Languages of the World (15 ed.) . 2008閲覧.
- ↑ Gordon, Raymond G., Jr., ed. (2005), “Sissano”, Ethnologue: Languages of the World (15 ed.) . 2008閲覧.
- ↑ Sanchez, Julio; Canton, Maria P. (2007), Microcontroller programming : the microchip PIC, Boca Raton, Florida: CRC Press, p. 37, ISBN 0-8493-7189-9
- ↑ W. S. Anglin and J. Lambek, The Heritage of Thales, Springer, 1995, ISBN 0-387-94544-X
- ↑ Bacon, Francis, The Advancement of Learning, 6, London, pp. Chapter 1
- ↑ Aiton, Eric J. (1985), Leibniz: A Biography, Taylor & Francis, pp. 245–8, ISBN 0-85274-470-6