二進法

二進法（にしんほう、（英: binary numeral system, base-2 numeral system）とは、底を2とする位取り記数法および命数法である。二進法によって表された数を二進数（にしんすう、（英: binary number）と呼ぶ。二進法において、位は順に底2の冪（…, 1/4, 1/2, 1, 2, 4, …）ごとに取り、位の値は 0 または 1 を取る（例：十進数の 7 (= 4 + 2 + 1) は二進法で 111、1.75 (= 1 + 0.5 + 0.25) は 1.11 と表される）。 二を底とする位取り記数法を二進記数法または単に二進法と呼ぶ。二進法による数の表示は、一の位を k = 0 とし添字 k で位の位置を表し、位の値を dk ∈ {0, 1} で表せば、以下のように書ける： d n − 1 ⋯ d 1 d 0 . d − 1 ⋯ . {\displaystyle d_{n-1}\cdots d_{1}d_{0}.d_{-1}\cdots \,.} これは以下の総和の略記と見なせる： ∑ k n − 1 d k 2 k = d n − 1 2 n − 1 + ⋯ + 2 d 1 + d 0 + d − 1 2 + ⋯ . {\displaystyle \sum _{k}^{n-1}d_{k}2^{k}=d_{n-1}2^{n-1}+\cdots +2d_{1}+d_{0}+{\frac {d_{-1}}{2}}+\dotsm {}\,.} 例えば十進法における 21.25 は二進法において、 10101.01 2 = 16 + 4 + 1 + 1 4 = 21.25 {\displaystyle 10101.01_{2}=16+4+1+{\frac {1}{4}}=21.25} と表される（添字の 2 は二進表記であることを示す）。負の数は一般的な記数法と同じく、負号をつけて表す（例：−10101.012）。 十進法など一般の位取り記数法と同様に、二進法においても小数部が有限の長さとなる数は一部の有理数に限られ、また円周率のような無理数を厳密に表すことはできない。二進法の場合、有理数を表す既約分数について、分母が2の冪ならば有限小数として書けるが、そうでないならば有限小数としては書けない。例えば十進法では 1/5 を有限小数 0.2 で表せるが、二進法では循環小数 0.00112 = 0.00110011…2 で表さなければならない。 電子式コンピュータの電子回路などのデジタル回路（デジタル論理回路）、磁気ディスク等の記憶メディアでは、電圧の高低、磁極の N/S など、物理現象を二状態のみに縮退して扱う（離散化などと言う）ので、それに、真と偽の2つの値（2値の真理値）のみを使用する二値論理（しばしば、電子的には H と L、論理的には T と F という記号が使われる）をマッピングする。更にそこで数値を扱うには、それに「0 と 1」の二進法をマッピングするのが最適である。 多くの応用で見られるように桁数が有限の場合は、数学的に言うなら「有理数の部分集合」が表現されているわけであるが、通常は「有限精度の実数」が表現されていると解釈される。このため、コンピュータやデジタル機器は二進数が使用される。 また、八進法や十六進法や三十二進法は同じく2の冪を底とするためしばしば利用される。 ビット列によって負の数の値を表すため広く用いられる方法の一つとして、2の補数表現がある。2の補数表現は、n 桁のビット列の最上位ビットの重みを +2n−1 ではなく −2n−1 とするものである。2の補数表現は、そのビットパターンが、加減(及び、乗)の演算において特別な処理が不要なものになる、という特長を持つ。ただし、溢れ（オーバーフロー）の扱いが違ってくる（これは、例えばx86プロセッサにおける、キャリーフラグとオーバフローフラグの違いのことである（ステータスレジスタ#キャリーとオーバーフローを参照））。 「十進法から二進法への変換方法」などといったものを考える必要はない。どちらも数の「表現法」に過ぎないのだから、単に「表現法 → 数 → 表現法」といったようにして変換すれば良いのである。 正の整数 m を十進法から二進法に変換するのは次のようにする。 m を x に代入する。 x を 2 で割って、余りを求める。 x/2 の商を x に代入する。 2. に戻る。x = 0 であれば終了。 余りを求めた順の逆に並べると、それが二進法に変換された結果になる。 例:192を二進法に変換する。 2)192　 　192=20×192 2) 96…0　192=21× 96+20×0 2) 48…0　192=22× 48+21×0+20×0 2) 24…0　192=23× 24+22×0+21×0+20×0 2) 12…0　192=24× 12+23×0+22×0+21×0+20×0 2) 6…0　192=25× 6+24×0+23×0+22×0+21×0+20×0 2) 3…0　192=26× 3+25×0+24×0+23×0+22×0+21×0+20×0 2) 1…1　192=27× 1+26×1+25×0+24×0+23×0+22×0+21×0+20×0 0…1 よって 19210 = 110000002 である。 正で 1 未満 (0 < m < 1) である数 m を十進法から二進法に変換するのは次のようにする。 1 を n に、m を x に代入する。 2x < 1 ならば、小数点以下第 n 位は 0 になる。2x > 1 ならば、小数点以下第 n 位は 1 になる。 2x = 1 ならば終了。 2x > 1 ならば 2x - 1 を x に代入する。2x < 1 ならば 2x を x に代入する。 n + 1 を n に代入する。 小数点以下の桁数が必要な桁数まで求まっているか、循環小数となったら終了する。 2. へ戻る。 計算の例1: 1/3 を二進法に変換する。 ここで「処理」の部分の最後「 1 3 × 2 = 2 3 < 1 {\displaystyle {\begin{matrix}{\frac {1}{3}}\times 2={\frac {2}{3}}<1\end{matrix}}} 」はそれ以前に出てきた式である。このため、これ以上続けても同じ式の繰り返しで永久に終わらないことがわかる。すなわち小数部の「01」が循環することがわかるので終了する。 よって1/310=0.010101…2=0.012 （なお、アンダーバーの部分（01）は無限に繰り返しという意味） 計算の例 2: 十進法での 0.1 を二進法に変換する。 ここで「処理」の部分の最後「0.4×2 = 0.8 < 1」はそれ以前に出てきた式である。このため、これ以上続けても同じ式の繰り返しで永久に終わらないことがわかる。すなわち小数部の「0011」が循環することがわかるので終了する。 よって 0.110 = 0.0001100110011…2 = 0.000112 である。 二進命数法とは、2 を底とする命数法である。 通常、二進法の数詞を持つとされるものは二つ組で数える体系であり、乗算が含まれない。以下にパプアニューギニアの南キワイ語 (Southern Kiwai) およびシッサノ語 (Sissano) の数詞を示す。 現代日本における万進、あるいは十二進法体系であるダース・グロスなどのように、2倍ごとに新しい単位が命名される体系は、自然言語では、パプアニューギニアのメルパ語 (Melpa) でのみ知られている。 中国には古くから易の八卦や六十四卦があり、それぞれ 3 ビットと 6 ビットに相当している。易経の六十四卦の配列は対応する整数の順になっていて、それらを 1→2→4→8→16→32→64 と進展させる｢加一倍の法｣を11世紀の儒学者邵雍が考案した。ただし、彼らがそれを整数（ないし、数）に対応するとして理解していたという証拠はない。その配列はそれぞれが二種類の値をとる要素の 6 タプルを辞書式順序に並べたものと見ることもできる。 インドの学者ピンガラ (Pingala, 紀元前200年頃) は韻律を数学的に表現する方法を考案し、それが現在知られている最古の二進法の記述の一つとされている。 同様の二進法的組合せの使用は、アフリカのヨルバ人が行っていた占い Ifá にもあり、中世ヨーロッパやアフリカのジオマンシーにも見られる。2 を底とする体系はサハラ以南のアフリカでジオマンシーに長く使われていた。 1605年、フランシス・ベーコンはアルファベットの文字を2種の記号の列で表す体系を論じ、任意の無作為なテキストで微かに判別可能なフォントの変化に符号化できるとした。一般理論として彼が指摘した重要な点は、同じ方法をあらゆる物に適用できるという点であり、「2種類の異なる状態をそれらの物で表現できればよく、鐘、トランペット、光、松明、マスケット銃など同様の性質があればどんなものでもよい」とした。これをベーコンの暗号（英語版）と呼ぶ。 数学的に二進法を確立したのは17世紀のゴットフリート・ライプニッツで、"Explication de l'Arithmétique Binaire" という論文も発表している。ライプニッツは現代の二進法と同じく、1 と 0 を使って二進法を表した。ライプニッツは中国愛好家でもあり、後に「易経」を知って、その八卦に 000 から 111 を対応させ、彼の賞賛してきた中国の哲学的数学の偉大な成果の証拠だとした。 1800年代中頃、イギリスの数学者ジョージ・ブールがブール代数（ブール論理）により、二進的な数（ここで言う「数」は、数学的な広義の意味であり、普通の二進法の対象である、数値という意味ではない）の代数による命題論理の形式化を示した。 1936-1937年の中嶋章と榛沢正男による「継電器回路に於ける単部分路の等価変換の理論」、1937年のクロード・シャノンによる "A Symbolic Analysis of Relay and Switching Circuits" により相次いで、リレーのようなスイッチング素子による回路（ディジタル回路）の設計がブール代数によって行えることが示され、1940年代に始まり今日まで続くコンピュータの理論の基礎のひとつとなっている。