二進数とは、2進数体系(または二進数体系)で表された数のことです。二進数体系とは、自然数を表すのに、通常0(ゼロ)と1(イチ)の2つの記号のみを用いる数表現方法です。また、二進数体系において有限の表現を持つ有理数、すなわち整数を2のべき乗で割った商を指す場合もあります。
2進数システムは、基数が2である位取り記数法です。各桁はビット、または2進数と呼ばれます。論理ゲートを使用したデジタル電子回路での実装が容易であるため、2進システムは、言語の単純さと物理的な実装におけるノイズ耐性から、他のさまざまな人間のコミュニケーション技術よりも好ましい使用システムとして、現代のほとんどすべてのコンピュータおよびコンピュータベースのデバイスで使用されています。[ 1 ]
現代の二進数システムは、15世紀、16世紀、17世紀にヨーロッパでトーマス・ハリオットによって初めて研究され、数十年後にゴットフリート・ライプニッツによって発明者として認められました。[ 2 ]しかし、二進数に関連するシステムは、古代エジプト、中国、ヨーロッパ、インドなど複数の文化でそれ以前にも現れており、例えば二進数ロットを使用した占いに関連しています。[ 3 ]

古代エジプトの書記は、分数を表すために2つの異なるシステムを使用していました。エジプトの分数(二進数システムとは関係ありません)とホルス目分数(数学史家の中には、このシステムで使用される記号を並べるとホルスの目になると考える人がいたため、このように呼ばれていますが、これは議論の余地があります)です。[ 4 ]ホルス目分数は、穀物、液体、またはその他の測定単位の分数を表す二進数システムであり、ヘカトの分数は、二進数分数1/2、1/4、1/8、1/16、1/ 32、および1/64の合計として表されます。このシステムの初期の形は、紀元前2400年頃のエジプト第5王朝の文書に見られ、完全に発達した象形文字の形は、紀元前1200年頃のエジプト第19王朝に遡ります。 [ 5 ]
古代エジプトの乗算方法も二進数と密接に関連している。この方法では、ある数を別の数で乗算するには、ある値(最初は2つの数のうちの最初の数)を2倍にするか、最初の数を加えるという一連の手順を実行する。これらの手順を実行する順序は、2番目の数の二進数表現によって決まる。この方法は、例えば紀元前1650年頃のリンド数学パピルスで使用されているのを見ることができる。 [ 6 ]

易経は紀元前9世紀に中国で成立した。[ 7 ]易経の二進法は、四進法による占いの解釈に用いられる。[ 8 ]
これは道教の陰陽二元論に基づいている。[ 9 ] 3ビットと6ビットの2進数に類似した8つの三爻卦(八卦)と64の六爻卦(「六十四」卦)は、少なくとも古代中国の周王朝の頃から使用されていた。[ 7 ]
宋代の学者、邵雍(1011~1077年)は、六十四卦を現代の二進数に似た形式に並べ替えたが、その配置を数学的に使用することを意図していなかった。[ 8 ]邵雍の正方形[ 10 ]で個々の六十四卦の最下位ビットを見て 、行に沿って実線を0、破線を1として右下から左上へ、または実線を1、破線を0として左上から右下へ読むと、六十四卦は0から63までのシーケンスとして解釈できる。 [ 11 ]
エトルリア人は占いの肝臓の外縁を16の部分に分け、それぞれに神の名前と天空の領域を刻んだ。肝臓の各領域は二進法の読み取り値を生成し、それが組み合わされて最終的な二進法の占いに使用された。[ 12 ]
古代ギリシャのドードーナ神託所での占いは、別々の壺、質問のタブレット、そして「はい」と「いいえ」のペレットから引くことによって行われた。その結果は、最終的な予言を作成するために組み合わされた。[ 13 ]
インドの学者ピンガラ(紀元前2世紀頃)は韻律を記述するための二元体系を開発した。[ 14 ] [ 15 ]彼は韻律を短音節と長音節(後者は短音節2つ分の長さ)の形で記述した。[ 16 ]これらはラグ(軽い)音節とグル(重い)音節として知られていた。
ピンガラのヒンドゥー教の古典『チャンダハーストラ』 (8.23)では、各韻律に固有の値を与えるための行列の形成について説明されています。「チャンダハーストラ」はサンスクリット語で文字通り韻律の科学を意味します。ピンガラのシステムでは、二進表現は現代の位取り記数法の二進数のように左ではなく右に向かって増加します。[ 17 ]ピンガラのシステムでは、数字はゼロではなく1から始まります。4つの短い音節「0000」が最初のパターンであり、値1に対応します。数値は、位取りの合計に1を加えることによって得られます。[ 18 ]
イファは、西アフリカのオヨ帝国のヨルバ族の間で人気の占いシステムです。易経に似ていますが、64 の二進記号を持つ易経とは異なり、最大 256 の二進記号を持ちます[ 19 ]。この数字は 16 を二乗したもので、8 ビット シーケンスで可能なすべての可能性と一致します。イファ占いでは、これはオドゥと呼ばれる可能な結果を反映しています。これらのオドゥは、8 つのシードを持つỌpẹlẹチェーンを使用して決定されます。各シードは 2 つの位置 (開いているか閉じているか) のいずれかに着地し、すべての可能な組み合わせを作成します。イファは 15 世紀の西アフリカのヨルバ族の間で生まれました。2008 年、ユネスコはイファを「人類の口承および無形遺産の傑作」のリストに追加しました。[ 20 ] [ 21 ]
フランス領ポリネシアのマンガレバ島の住民は、 1450 年以前に二進法と十進法を組み合わせたシステムを使用していた。 [ 22 ]アフリカとアジアでは、二進音のスリットドラムがメッセージの符号化に使用されている。[ 9 ]易経 に似た二進法の組み合わせのセットは、イファなどの伝統的なアフリカの占いシステムや、中世の西洋の風水でも使用されてきた。オーストラリア先住民の言語の大部分は、2 進法を使用している。[ 23 ]
1605年、フランシス・ベーコンは、アルファベットの文字をバイナリ数字のシーケンスに還元し、それを任意のテキストのフォントのほとんど目に見えない変化として符号化できるシステムについて論じた。[ 24 ]バイナリ符号化の一般理論にとって重要なことに、彼はこの方法がどんな物体にも使用できると付け加えた。「ただし、それらの物体が2倍の差異しか生じないものである場合に限る。例えば、鐘、トランペット、ライトや松明、マスケット銃の発砲音、その他同様の性質を持つあらゆる道具など」。[ 24 ]
1617年、ジョン・ネイピアは、文字による非位置表現を用いて二進数計算を行うための 位置算術と呼ばれるシステムを記述した。トーマス・ハリオットは、二進数を含むいくつかの位置記数法を研究したが、その結果は公表しなかった。それらは後に彼の論文の中から発見された。[ 25 ] おそらくヨーロッパでこのシステムが最初に発表されたのは、1700年のフアン・カラミュエル・イ・ロブコヴィッツによるものと思われる。 [ 26 ]

ライプニッツは二進法に関する100以上の原稿を執筆したが、そのほとんどは未発表のままである。[ 27 ] 1679年に最初の本格的な著作を発表する以前にも、数学とは無関係の著作の余白に走り書きされた数表や基本的な計算など、二進法の概念を探求する初期の試みが数多くの原稿に見られる。[ 27 ]
ライプニッツが1679年に発表した二進法に関する最初の著作「二進進行について」では、十進法と二進法の変換に加え、二進数を用いた加算、減算、乗算、除算などの基本的な算術演算を実行するためのアルゴリズムが紹介されました。また、6桁の数の二乗を計算したり、平方根を求めたりするための二進代数も開発しました。[ 27 ]
彼の最も有名な業績は、1703年に出版された論文「二進算術の説明」に表されています。ライプニッツの論文の正式名称は英語に「1と0の文字のみを使用する二進算術の説明、その有用性に関するいくつかの考察、および伏羲の古代中国の数字に光を当てること」と訳されます。[ 28 ]ライプニッツのシステムは、現代の二進数システムと同様に0と1を使用します。ライプニッツの二進数システムの例は次のとおりです。[ 28 ]
1700年、中国で宣教師として活動中に易経の専門家となったイエズス会司祭ヨアヒム・ブーヴェと文通していた際、ライプニッツは自身の二進法表記法を説明し、ブーヴェは1701年の書簡で易経が独立した並行的な二進法表記法の発明であることを証明した。ライプニッツとブーヴェは、この対応関係は彼が賞賛する哲学的数学における中国の偉大な業績の証拠であると結論づけた。[ 29 ]この並行的な発明について、ライプニッツは「二進算術の説明」の中で「これほど長い年月を経て、その意味が回復されたことは、ますます不思議に思えるだろう」と書いている。[ 30 ]
この関係は、ライプニッツの普遍的な言語概念、すなわちcharacteristica universalisの中心的な考え方であり、ゴットロープ・フレーゲやジョージ・ブールといった後継者たちが現代の記号論理学を形成する際に密接に引き継いだ人気の高い考え方であった。[ 31 ]ライプニッツは、1685年に宣教師として中国を訪れたフランスのイエズス会士ジョアキム・ブーヴェとの接触を通じて 初めて易経を知った。ライプニッツは易経の六十四卦を、キリスト教徒としての自身の宗教的信念の普遍性の肯定とみなした。 [ 32 ]二進数はライプニッツの神学の中心であった。彼は二進数がキリスト教のcreatio ex nihilo、すなわち無からの創造の象徴であると信じていた。[ 33 ]
異教徒に理解させるのが難しい概念の一つに、神の全能の力による無からの創造がある。しかし、この力を最もよく表し、実証できるものは、ここで示されているように、1と0、あるいは無という単純で飾り気のない表現を通して示される数の起源以外にはないと言えるだろう。
—ライプニッツがブラウンシュヴァイク公に宛てた手紙には易経の六十四卦が添付されている[ 32 ]

1854年、イギリスの数学者ジョージ・ブールは、ブール代数として知られるようになる代数論理体系を詳述した画期的な論文を発表した。彼の論理計算は、デジタル電子回路の設計に不可欠なものとなった。[ 34 ]
1937年、クロード・シャノンはMITで修士論文を発表し、電子リレーとスイッチを用いてブール代数と二進数演算を史上初めて実装した。シャノンの論文は「リレーおよびスイッチング回路の記号解析」と題され、実用的なデジタル回路設計の基礎を築いた。[ 35 ]
1937 年 11 月、当時ベル研究所に勤務していたジョージ・スティビッツは、リレーベースのコンピュータを完成させ、それを組み立てた場所である「キッチン」にちなんで「モデル K」と名付けました。これはバイナリ加算を使用して計算を行いました。[ 36 ]ベル研究所は 1938 年後半にスティビッツを責任者とする本格的な研究プログラムを承認しました。1940 年 1 月 8 日に完成した複素数コンピュータは、複素数を計算することができました。1940 年 9 月 11 日にダートマス大学で開催されたアメリカ数学会の会議でのデモンストレーションで、スティビッツはテレタイプを使用して電話回線経由で複素数計算機に遠隔コマンドを送信することができました。これは電話回線経由で遠隔で使用された最初のコンピュータでした。このデモンストレーションを目撃した会議の参加者の中には、ジョン・フォン・ノイマン、ジョン・モークリー、ノーバート・ウィーナーがおり、ウィーナーは回顧録でこのことについて書いています。[ 37 ] [ 38 ] [ 39 ]
1935年から1938年にかけてコンラート・ツーゼによって設計・製造されたZ1コンピュータは、ブール論理とバイナリ浮動小数点数を使用していた。[ 40 ]
任意の数値はビット列(二進数)で表すことができ、ビット列は互いに排他的な2つの状態を取り得る任意のメカニズムで表すことができます。以下の記号列はいずれも、667の二進数値として解釈できます。

各場合において表される数値は、各シンボルに割り当てられた値によって決まります。コンピューティングの初期の頃は、バイナリ値を表すためにスイッチ、パンチ穴、パンチ紙テープが使用されていました。[ 41 ]現代のコンピュータでは、数値は2つの異なる電圧で表される場合があります。磁気ディスクでは、磁気極性が使用される場合があります。「正」、「はい」、「オン」の状態は、必ずしも数値の1と等価ではありません。これは、使用されているアーキテクチャによって異なります。
アラビア数字を用いた数字の慣習的な表現に倣い、二進数は一般的に記号0と1を用いて表記されます。二進数は表記される際、基数(基数)を示すために添え字、接頭辞、または接尾辞が付けられることがよくあります。以下の表記は同等です。
二進数は、十進数と区別するために、通常は一桁ずつ読み上げられます。例えば、二進数の100は、二進数であることを明確にし、正確性を保つために、 「ワン・ゼロ・ゼロ」と発音され、 「ワン・ハンドレッド」とは発音されません。二進数の100は4という値を表すため、この数を「ワン・ハンドレッド」(全く異なる値、または量を表す言葉)と呼ぶのは紛らわしいでしょう。あるいは、二進数の100を「フォー」(正しい値)と読み上げることもできますが、これでは二進数であることが明確になりません。
二進数での数え方は、他の数体系での数え方と似ています。1桁の数字から始まり、各記号を昇順に数えていきます。二進数での数え方を詳しく見ていく前に、より馴染みのある十進数での数え方を基準として簡単に説明しておきましょう。
10進数では、 0から9までの10個の記号を使用します。カウントは、最下位桁(右端の桁)をインクリメントして置き換えることから始まります。この桁は、しばしば第1桁と呼ばれます。この位置で使用可能な記号がなくなると、最下位桁は0にリセットされ、次の上位桁(左に1つ離れた位置)がインクリメントされ(オーバーフロー)、下位桁のインクリメントによる置き換えが再開されます。このリセットとオーバーフローの方法は、各桁について繰り返されます。カウントは次のように進行します。


2進数でのカウントも全く同じ手順で行われ、増分置換は最下位の2進数桁、つまりビット(一番右のビット、または第1ビットとも呼ばれる)から始まりますが、使用できる記号は0と1の2つだけです。したがって、ビットが2進数で1に達した後、インクリメントによってそのビットは0にリセットされますが、同時に左隣のビットもインクリメントされます。
2進数では、各ビットは2のべき乗を表し、右端のビットは2⁰ 、次のビットは2¹ 、その次は2² 、といった具合になります。2進数の値は、各「1」ビットが表す2のべき乗の合計です。例えば、2進数100101を10進数に変換すると次のようになります。
二進数における算術演算は、位取り記数法を用いる他の記数法における算術演算とよく似ています。二進数に対しては、加算、減算、乗算、除算を行うことができます。

2進数における最も単純な算術演算は加算です。2つの1桁の2進数を加算するのは、繰り上がりという形式を用いることで比較的簡単に行えます。
2つの「1」を足すと「0」になり、次の桁には「1」を足す必要があります。これは、1桁の数字を足し合わせた場合の10進数で起こることと似ています。結果が基数(10)以上の場合、左の桁がインクリメントされます。
これは繰り上がりと呼ばれます。加算の結果が桁の値を超える場合、超過分を基数(つまり10/10)で割った値を左に「繰り上げ」、次の桁の値に加えます。これは、次の桁の重みが基数と同じ係数だけ大きくなるため、正しい動作です。繰り上がりは2進数でも同じように機能します。
1 1 1 1 1 (繰り上がり桁) 0 1 1 0 1 + 1 0 1 1 1 ------------- = 1 0 0 1 0 0 = 36この例では、2 つの数字が加算されています。01101 2 (13 10 ) と 10111 2 (23 10 )。一番上の行は、使用されるキャリービットを示しています。右端の列から始め、1 + 1 = 10 2となります。1 は左に繰り上がり、0 は右端の列の一番下に書き込まれます。右から 2 番目の列を加算します。1 + 0 + 1 = 10 2再び、1 が繰り上がり、0 が一番下に書き込まれます。3 番目の列: 1 + 1 + 1 = 11 2。今度は 1 が繰り上がり、1 が最下行に書き込まれます。このように進めると、最終的な答え 100100 2 (36 10 ) が得られます。
コンピュータが2つの数値を加算する必要がある場合、任意の2ビットxとyに対して、 x xor y = (x + y) mod 2というルールにより、非常に高速な計算が可能になります。
多くの二進数加算問題を簡略化する方法として、「ロングキャリー法」または「ブルックハウス法」があります。この方法は、一方の数に長い一列の1が含まれる場合に特に有効です。これは、二進数では、n個の1(nは任意の整数)のみで構成される桁の列が与えられた場合、1を加えると、1の後にn個の0が続くという単純な前提に基づいています。この概念は、論理的には、 n個の9の列に1を加えると、 1の後にn個の0が続くという十進数の場合と同じです。
2進数 10進数 1 1 1 1 1 同様に 9 9 9 9 9 + 1 + 1 ——————————— ——————————— 1 0 0 0 0 0 1 0 0 0 0 0
このような長い文字列は、2進数システムではごく一般的です。そこから、大きな2進数は、過剰な繰り上がり演算なしに、2つの簡単な手順で加算できることがわかります。次の例では、2つの数字 1 1 1 0 1 1 1 1 1 0 2 (958 10 ) と 1 0 1 0 1 1 0 0 1 1 2 (691 10 ) を、左側の従来の繰り上がり方式と右側の長い繰り上がり方式を使用して加算しています。
伝統的な持ち運び方法 長距離持ち運び方法 対 1 1 1 1 1 1 1 1 (繰り上がり) 1 ← 1 ← 下の「文字列」の1桁先まで1を繰り上げる 1 1 1 0 1 1 1 1 1 0 11 1 011 1 1 10 「文字列」を消します。 + 1 0 1 0 1 1 0 0 1 1 + 1 0 101 1 0 011 を追加し、追加された数字を消します。 ——————————————————————— —————————————————————— = 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 1
一番上の行は、使用されるキャリービットを示しています。標準的な桁上げの代わりに、対応する下の位に「1」がある最下位の「1」を追加し、「1」を数列の末尾から1桁先に繰り上げることができます。「使用済み」の数字は既に加算されているため、取り消す必要があります。他の長い文字列も同様に同じ手法で取り消すことができます。その後、残りの桁を通常どおり加算します。この方法で進めると、最終的な答えは 1 1 0 0 1 1 1 0 0 0 1 2 (1649 10 ) となります。小さな数を使用したこの簡単な例では、従来のキャリー方式では 8 回のキャリー操作が必要でしたが、ロングキャリー方式では 2 回しか必要なかったため、労力が大幅に削減されました。
引き算もほぼ同じように機能します。
「0」の桁から「1」の桁を引くと「1」の桁が得られますが、次の桁から「1」を引く必要があります。これは「借り」と呼ばれます。原理は繰り上がりと同じです。引き算の結果が桁の最小値である0より小さい場合、左から不足分を基数(つまり10/10)で割った値を「借り」、次の桁の値から引きます。
* * * * (星印の付いたコラムは以下から引用) 1 1 0 1 1 1 0 − 1 0 1 1 1 ---------------- = 1 0 1 0 1 1 1
*(星印の付いたコラムは以下から引用) 1 0 1 1 1 1 1 – 1 0 1 0 1 1 ---------------- = 0 1 1 0 1 0 0
正の数を引くことは、絶対値が等しい負の数を加えることと同じです。コンピュータは負の数を扱うために符号付き数表現を使用します。最も一般的なのは2の補数表記です。このような表現では、別途「減算」演算を行う必要がありません。2の補数表記を用いると、減算は次の式で表すことができます。
2進数における乗算は、10進数における乗算と似ています。2つの数AとBは、部分積によって乗算できます。Bの各桁について、Aのその桁との積を計算し、新しい行に左にずらして書き出します。このとき、右端の桁が、使用したBの桁と揃うようにします。これらの部分積をすべて合計すると、最終結果が得られます。
2進数には2桁しかないため、部分的な乗算の結果は2通りしかありません。
例えば、2進数1011と1010は次のように乗算されます。
1 0 1 1 ( A ) × 1 0 1 0 ( B ) ---------0 0 0 0 ← B の右端の「ゼロ」へ+ 1 0 1 1 ← B の次の「イチ」へ + 0 0 0 0 + 1 0 1 1 --------------- = 1 1 0 1 1 1 0
2進数は、 2進小数点以下のビットと乗算することもできます。
1 0 1 . 1 0 1 A (10進数で5.625) × 1 1 0 . 0 1 B (小数で6.25) -------------------1 . 0 1 1 0 1 ← B の「1」へ+ 0 0 . 0 0 0 0 ← B の「0」へ + 0 0 0 . 0 0 0 + 1 0 1 1 . 0 1 + 1 0 1 1 0 . 1 --------------------------- = 1 0 0 0 1 1 . 0 0 1 0 1 (小数で 35.15625)
ブースの乗算アルゴリズムも参照のこと。
2進数における長除法は、10進数における長除法とよく似ています。
以下の例では、除数は 101 2(10 進数で 5)、被除数は 11011 2 (10 進数で 27)です。手順は 10進数の筆算と同じです。ここでは、除数 101 2が被除数の最初の 3 桁 110 2に 1 回入るので、一番上の行に「1」が書き込まれます。この結果に除数を掛け、被除数の最初の 3 桁から引きます。次の桁 (「1」) を追加して、新しい 3 桁の数字列を取得します。
1 ___________ 1 0 1 ) 1 1 0 1 1 − 1 0 1 ----- 0 0 1
次に、新しい数列を用いてこの手順を繰り返し、被除数の桁がすべてなくなるまで続けます。
1 0 1 ___________ 1 0 1 ) 1 1 0 1 1 − 1 0 1 ----- 1 1 1 − 1 0 1 ----- 0 1 0
したがって、11011 2を 101 2で割った商は101 2であり、これは上段に示されています。一方、余りは下段に示されています 10 2です。小数で表すと、27 を 5 で割った余りが 2 であるのと同等です。
長除法以外にも、各反復において部分的な余りから過剰に減算することを可能にする手順を考案することも可能であり、それによって体系性は劣るものの、結果としてより柔軟な代替方法が得られる。
2進数の平方根を桁ごとに計算する手順は、基本的に10進数の平方根の場合と同じですが、2進数であるため、はるかに簡単です。まず、桁数を偶数にするために、必要に応じて先頭に0を付けて、桁を2桁ずつグループ化します。次に、各ステップで、これまでの答えに01を追加したものを考えます。これが現在の余りから減算できる場合は、減算します。次に、余りに次の桁のペアを追加します。減算した場合は、答えの次の桁は1になり、そうでない場合は0になります。
1 1 1 1 1 0 1 1 0 1 ------------- ------------- ------------- ------------- ------------- √ 10 10 10 01 √ 10 10 10 01 √ 10 10 10 01 √ 10 10 10 01 √ 10 10 10 01 - 1 - 1 - 1 - 1 これまでの回答は 0、----------- 01 を拡張すると 001、1 10 1 10 1 10 1 10 になります これは減算できます - 1 01 - 1 01 - 1 01 最初のペア10から、これまでの答えは1です。------- ------- ------- つまり、01 を加えた最初の桁は 101 です。1 10 1 10 01 1 10 01 答えは1です。これは-1 10 01を引くことができます。 余り110から、これまでの答えは11、これまでの答えは110、---------- 次の答えの数字は 1 です。01 を追加すると 1101、01 を追加すると 11001、0 これは大きすぎるので、差し引くことはできません 余りから引くと、余りは 11001 になります。これで完了です! 110なので、答えの次の桁の次の桁は1です。 答えは0です。
二進数演算では、分数 の二進数展開は分母が2 のべき乗である場合にのみ終了します。その結果、1/10 は有限の二進数表現を持ちません (10 の素因数は 2 と 5 です)。このため、10 × 1/10 は二進数浮動小数点演算で正確に 1 と等しくありません。例として、1/3 の二進数展開は .010101... であり、これは、
2の逆べき乗の有限個の和では正確な値を求めることはできません。1/3の二進数表現では、0と1が永遠に交互に現れるからです。
バイナリ記号の数値的解釈とは直接関係ありませんが、ビット列はブール論理演算子を使用して操作できます。このようにバイナリ記号の列を操作することをビット演算と呼びます。論理演算子AND、OR、XORは、入力として与えられた2つのバイナリ数の対応するビットに対して実行できます。論理NOT演算は、入力として与えられた単一のバイナリ数の個々のビットに対して実行できます。このような演算は、算術のショートカットとして使用されることもあり、その他の計算上の利点もあります。たとえば、バイナリ数の左シフトは、2の(正の整数)べき乗による乗算に相当します。

10 進整数を2 進数 (バイナリ) に変換するには、その数を2 で割ります。余りが最下位ビットになります。商を再び 2 で割り、その余りが次の最下位ビットになります。このプロセスは商が 1 になるまで繰り返されます。余りのシーケンス (最後の商が 1 になる場合を含む) がバイナリ値を形成します。これは、2 で割ったときの余りが 0 または 1 でなければならないためです。たとえば、(357) 10は (101100101) 2と表されます。 [ 44 ]
2進数から10進数への変換は、前述のアルゴリズムを単純に反転させるだけです。2進数のビットは、最上位(左端)ビットから順に1つずつ使用されます。値0から始まり、前の値が2倍され、次のビットが加算されて次の値が生成されます。これは複数列の表で整理できます。たとえば、10010101101 2を10進数に変換するには、次のようにします。
結果は 1197 10です。最初の事前値 0 は、単なる初期の小数値です。この方法は、ホーナー方式の応用です。
数値の小数部分も同様の方法で変換されます。これもまた、シフト操作と倍化または半分化の等価性に基づいています。
0.11010110101 2のような小数バイナリ数では、最初の桁は2番目など。したがって、小数点の後に最初に 1 がある場合、その数は少なくとも、そしてその逆も同様です。その数を2倍すると、少なくとも1になります。これは、変換する数を繰り返し2倍し、結果が少なくとも1であるかどうかを記録し、整数部分を削除するというアルゴリズムを示唆しています。
例えば、バイナリでは、次のようになります。
したがって、循環小数0.3 ... は循環二進数 0.01 ...と等価です。
例えば、0.110をバイナリで表すと次のようになります。
これも循環する二進数 0.0 0011 ... です。有限小数でも二進数で循環展開を持つことは意外に思われるかもしれません。そのため、多くの人が 1/10 + ... + 1/10 (10 個の数の加算) が二進浮動小数点演算で 1 と異なることに驚きます。実際、有限展開を持つ二進数で唯一のものは、整数を 2 のべき乗で割った形ですが、1/10 はそうではありません。
最終的な変換は、2進数から10進数への変換です。循環小数の場合のみ問題が生じますが、それ以外の場合は、小数を整数に変換し、上記のように変換した後、10進数の適切な2のべき乗で割ります。例:
バイナリから10進数に変換するもう1つの方法は、 16進数に慣れている人にとってはより速い場合が多いが、間接的に変換することである。まず (バイナリで) を ((16進数で)そして変換する((16進数)から((小数点)
非常に大きな数の場合、これらの単純な方法は、一方のオペランドが非常に大きい乗算または除算を多数実行するため、非効率的です。漸近的には、単純な分割統治アルゴリズムの方が効果的です。バイナリ数が与えられた場合、それを 10 kで割ります。ここで、kは商が余りとほぼ等しくなるように選択されます。次に、これらの各部分を 10 に変換し、2 つを連結します。10 数が与えられた場合、それをほぼ同じサイズの 2 つの部分に分割し、それぞれをバイナリに変換します。次に、変換された最初の部分に 10 kを掛け、2 番目の変換された部分に加算します。ここで、kは、変換前の 2 番目の最下位部分の 10 桁の数です。
2進数と16進数の変換は、2進数の方が容易です。これは、16進数の基数(16)が2進数の基数(2)のべき乗であるためです。具体的には、16 = 2⁴なので、隣の表に示すように、16進数の1桁を表すには2進数の4桁が必要です。
16進数を2進数に変換するには、対応する2進数の数字を置き換えるだけです。
2進数を16進数に変換するには、4ビットずつに分割します。ビット数が4の倍数でない場合は、左側に0ビットを追加してパディングします。例:
16進数を10進数に変換するには、各16進数の桁に対応する10進数に16のべき乗を掛け、それらの値を足し合わせます。
2進数は8進数に簡単に変換できます。8進数は基数が8であり、これは2のべき乗(つまり2³ )なので、8進数の1桁を表すにはちょうど3つの2進数が必要です。8進数と2進数の対応関係は、上の表の最初の8桁の16進数と同じです。2進数の000は8進数の0に相当し、2進数の111は8進数の7に相当します。
8進数から2進数への変換は、 16進数の場合と同じ手順で行われます。
そして、2進数から8進数へ:
そして8進数から10進数へ:
整数以外の数は、負のべき乗を用いて表すことができ、その負のべき乗は基数点(十進法では小数点と呼ばれる)によって他の桁と区別されます。例えば、2進数 11.01 2は次のことを意味します。
合計で3.25(小数点以下)です。
すべての二進有理数有限の二進数表現を持つ。つまり、二進数表現は小数点以下の項数が有限である。他の有理数も二進数表現を持つが、有限ではなく循環的であり、有限の数字列が無限に繰り返される。例えば、
任意の有理数の二進数表現が有限数または循環数になるという現象は、他の基数ベースの数体系でも発生します。たとえば、10進数の説明を参照してください。もう1つの類似点は、有限数表現の代替表現が存在することです。これは、0.111111...が等比数列2 −1 + 2 −2 + 2 −3 + ...の和であり、1 であるという事実に基づいています。
終止も循環もしない二進数は無理数を表します。例えば、
伏羲の二進数列は、六十四卦を二進数で表すより理にかなった方法と言えるでしょう。文王数列の根拠となる理由(もしあれば)は不明です。