二進法
二進法(にしんほう)とは、二を底(てい、基(base)とも)として、底の冪の和で数を表現する方法である。
英語でバイナリ (binary) というが、これはラテン語「binarius」に由来する語で、「binary」と「binarius」は本来「二個一組」「二つから成る」を意味する語である(用例:バイナリ空間分割)。
記数法編集
二を底とする位取り記数法を二進記数法と呼ぶ。混乱を防ぐために二進法であることを示す場合には、下付の 2 を用いて (110)2 などとすることがある。二進記数法で
(各位の値 ai は 0 か 1)と表される数は二進法の定義から、
という数を表している(ここで 2 は十進法の 2 である)。
「二進記数法で記された数」という意味として二進数という語が使われることがある。しかし、二進数という数の体系(例えば「整数」といったような)があるわけではない。また、p進数における p = 2 の場合とは全く異なる。
二進法を用いれば 0 と 1 の二種類の数字のみで零を含む任意の自然数が表現可能であり、負号と合わせることで整数が表現可能である。更に小数点を合わせて四種類の記号のみで実数の表現が可能である。別の言い方をすると、「もし数字が 0 と 1 しか無かったら」を実現した方法が二進法である。
位数表編集
桁 | 二進法の位数 | 二進数 | 三進数に換算 | 六進数に換算 | 十進数に換算 | 十二進数に換算 |
---|---|---|---|---|---|---|
整数第七位 | 64の位 | 1000000 | 2101 | 144 | 64 | 54 |
整数第六位 | 32の位 | 100000 | 1012 | 52 | 32 | 28 |
整数第五位 | 16の位 | 10000 | 121 | 24 | 16 | 14 |
整数第四位 | 8の位 | 1000 | 22 | 12 | 8 | 8 |
整数第三位 | 4の位 | 100 | 11 | 4 | 4 | 4 |
整数第二位 | 2の位 | 10 | 2 | 2 | 2 | 2 |
整数第一位 | 1の位 | 1 | 1 | 1 | 1 | 1 |
小数第一位 | 1/2の位 | 0.1 | 1/2 | 0.3 | 0.5 | 0.6 |
小数第二位 | 1/4の位 | 0.01 | 1/11 | 0.13 | 0.25 | 0.3 |
小数第三位 | 1/8の位 | 0.001 | 1/22 | 0.043 | 0.125 | 0.16 |
小数第三位 | 1/16の位 | 0.0001 | 1/121 | 0.0213 | 0.0625 | 0.09 |
二進法 | 三進法 | 六進法 | 十進法 | 十二進法 |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 | 2 |
11 | 10 | 3 | 3 | 3 |
100 | 11 | 4 | 4 | 4 |
101 | 12 | 5 | 5 | 5 |
110 | 20 | 10 | 6 | 6 |
111 | 21 | 11 | 7 | 7 |
1000 | 22 | 12 | 8 | 8 |
1001 | 100 | 13 | 9 | 9 |
1010 | 101 | 14 | 10 | A |
1011 | 102 | 15 | 11 | B |
1100 | 110 | 20 | 12 | 10 |
1101 | 111 | 21 | 13 | 11 |
1110 | 112 | 22 | 14 | 12 |
1111 | 120 | 23 | 15 | 13 |
10000 | 121 | 24 | 16 | 14 |
小数と除算編集
二進法は因数が2だけなので、1/3や1/5といった奇数分割ができない。二進表記で、1/3は 1÷(11)2 = 0.0101…となり、1/5も 1÷(101)2 = 0.00110011…の無限小数になる。偶数でも、六や十といった「奇数で割り切れる偶数」では1を割り切れない。単位分数は、二の冪数を除いて全て割り切れない無限小数になる。
単位分数 | 除数の素因数分解 | 二進小数 | 六進小数 | 十進小数 |
---|---|---|---|---|
1/2 | 2 | 0.1 | 0.3 | 0.5 |
1/3 | 3 | 0.0101… | 0.2 | 0.3333… |
1/4 | 22 | 0.01 | 0.13 | 0.25 |
1/5 | 5 | 0.00110011… | 0.1111… | 0.2 |
1/6 | 2×3 | 0.001… | 0.1 | 0.1666… |
1/7 | 7 | 0.001… | 0.0505… | 0.142857… |
1/8 | 23 | 0.001 | 0.043 | 0.125 |
1/9 | 32 | 0.000111… | 0.04 | 0.1111… |
1/10 | 2×5 | 0.00011… | 0.03333… | 0.1 |
1/11 | 11 | 0.0001011101… | 0.0313452421… | 0.0909… |
1/12 | 22×3 | 0.0001… | 0.03 | 0.08333… |
1/16 | 24 | 0.0001 | 0.0213 | 0.0625 |
1/18 | 2×32 | 0.0000111… | 0.02 | 0.05555… |
1/20 | 22×5 | 0.000011… | 0.01444… | 0.05 |
1/25 | 52 | 0.00001010001111010111… | 0.01235… | 0.04 |
1/27 | 33 | 0.000010010111101101… | 0.012 | 0.037… |
1/32 | 25 | 0.00001 | 0.01043 | 0.03125 |
1/36 | 22×32 | 0.00000111… | 0.01 | 0.02777… |
1/64 | 26 | 0.000001 | 0.003213 | 0.015625 |
※ 単位分数と除数の素因数分解は十進表記。
加算表編集
+ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 10 |
デジタル機器での使用編集
電子式コンピュータの電子回路などのデジタル回路(デジタル論理回路)、磁気ディスク等の記憶メディアでは、電圧の高低、磁極の N/S など、物理現象を二状態のみに縮退して扱う(離散化などと言う[注 1])ので、それに、真と偽の2つの値(2値の真理値)のみを使用する二値論理(しばしば、電子的には H と L、論理的には T と F という記号が使われる)をマッピングする。更にそこで数値を扱うには、それに「0 と 1」の二進法をマッピングするのが最適である。
多くの応用で見られるように桁数が有限の場合は、数学的に言うなら「有理数の部分集合」が表現されているわけであるが、通常は「有限精度の実数」が表現されていると解釈される。
負数の扱い編集
2種類の記号のみで、負の範囲の値(負の範囲の整数)も扱うには、広く一般的に用いられている方法は、最上位ビット(MSB)の重みを、2Nではなく −(2N) であるとするものである(2の補数を参照)。この方法は、そのビットパターンが、加減(及び、乗)の演算において特別な処理が不要なものになる、という特長を持つ。ただし、溢れ(オーバーフロー)の扱いが違ってくる(これは、例えばx86プロセッサにおける、キャリーフラグとオーバフローフラグの違いのことである(ステータスレジスタ#キャリーとオーバーフローを参照))。また固定長の場合に表現可能な範囲が、最小の値(負の側の絶対値が最大の値)のほうにひとつはみ出している、という扱いが面倒な場合がある特徴があって、たとえば8ビットで表現可能な範囲は −128, −127, 〜 −2, −1, 0, 1, 〜 126, 127 というようになっている。これに関しては、例えばC言語の標準規格のように、他の表現法も考慮し、全ての符号付き固定長のデータ型は、signed char であれば −128 までではなく −127 まで、などといった仕様になっている、といった場合がある。
他のN進法から二進法への変換方法編集
「十進法から二進法への変換方法」などといったものを考える必要はない。どちらも数の「表現法」に過ぎないのだから、単に「表現法 → 数 → 表現法」といったようにして変換すれば良いのである。
命数法編集
二進命数法とは、2 を底とする命数法である。 自然言語では、このような命数法はパプアニューギニアのメルパ語[1] (Melpa) でのみ知られている[2]。
二進数 | 十進数 | メルパ語 |
---|---|---|
1 | 1 | tenta |
10 | 2 | ralg |
11 | 3 | raltika |
100 | 4 | timbakaka |
101 | 5 | timbakaka pamb ti |
110 | 6 | timbakaka pamb ralg |
111 | 7 | timbakakagul raltika |
1000 | 8 | engaka |
1001 | 9 | engaka pamb ti |
1010 | 10 | engaka pamb ralg pip |
通常、二進法の数詞を持つとされるものは二つ組で数える体系であり、乗算が含まれないため、真の二進法ではない。以下にパプアニューギニアの南キワイ語[3] (Southern Kiwai) およびシッサノ語[4] (Sissano) の数詞を示す[2]。
二進数 | 十進数 | 南キワイ語 | シッサノ語 |
---|---|---|---|
1 | 1 | neis | puntanen |
10 | 2 | netewa | eltin |
11 | 3 | netewa nao | eltin puntanen |
100 | 4 | netewa netewa | eltin eltin |
101 | 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年3月12日閲覧。
- ^ a b 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. オリジナルの2007年9月5日時点によるアーカイブ。 .
- ^ Gordon, Raymond G., Jr., ed. (2005), “Kiwai, Southern”, Ethnologue: Languages of the World (15 ed.) 2008年3月12日閲覧。
- ^ Gordon, Raymond G., Jr., ed. (2005), “Sissano”, Ethnologue: Languages of the World (15 ed.) 2008年3月12日閲覧。
- ^ 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