2進数

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

2進数、 2を底とする記数法または2進数法で表される数値であり、通常は「0」(ゼロ)と「1」(1 )の2つの記号のみを使用する数式の方法です

2を底とする記数法は、基数2の位取り記数法です。各桁は、ビットまたは2進数と呼ばれます。論理ゲートを使用したデジタル電子回路でのその単純な実装のために、バイナリシステムは、他のさまざまな人間の通信技術よりも、ほとんどすべての最新のコンピュータおよびコンピュータベースのデバイスによって、好ましい使用システムとして使用されています。言語。

歴史

現代の2進数システムは、16世紀と17世紀にトーマス・ハリオットフアン・カラミュエル・イ・ロブコヴィッツゴットフリート・ライプニッツによってヨーロッパで研究されました。ただし、2進数に関連するシステムは、古代エジプト、中国、インドなどの複数の文化で以前に登場しました。ライプニッツは特に中国の易経に触発されました

エジプト

ホルスの目の一部で表されていると思われる算術値

古代エジプトの筆記者は、分数に2つの異なるシステムを使用していました。エジプト式分数(2進数システムとは関係ありません)とホルスの目分数(数学の多くの歴史家は、このシステムに使用される記号を次のように配置できると信じているためです)。ホルスの目、これは論争されていますが)。[1] Horus-Eyeフラクションは、穀物、液体、またはその他の測定値の小数のバイナリ番号付けシステムであり、ヘカットのフラクションは、バイナリフラクション1 / 2、1 / 4、1 /の合計として表されます。 8、1 / 16、1 / 32、および1/64。このシステムの初期の形式は、エジプト第5王朝の文書に記載されています。、紀元前2400年頃、その完全に発達した象形文字の形は、紀元前1200年頃のエジプト第19王朝にまでさかのぼります。[2]

古代エジプトの乗法に使用された方法も、2進数と密接に関連しています。この方法では、1つの数値に1秒を掛けるのは、値(最初は2つの数値の最初の数値)が2倍になるか、最初の数値が追加される一連のステップによって実行されます。これらのステップが実行される順序は、2番目の数値の2進表現によって与えられます。この方法は、たとえば、紀元前1650年頃にさかのぼるリンド数学パピルスで使用されています。[3]

中国

道教八卦

易経は紀元前9世紀の中国にまでさかのぼります[4]易経の二進表記は、その四紀 占い技法を解釈するために使用されます。[5]

それは陰と陽のタオイスティックな二重性に基づいています。[6] 3ビットおよび6ビットの2進数に類似した、 8つのトライグラム(八卦)64のヘキサグラムのセット(「64」グア)は、少なくとも古代中国の周王朝の早い時期に使用されていました。 。[4]

宋王朝の学者である邵雍(1011-1077)は、数学的に使用するつもりはありませんでしたが、六十四卦を現代の2進数に似た形式に再配置しました。[5]邵雍の正方形の単一の六十四卦の上に最下位ビットを表示し、右下から左上に実線を0、破線を1として、または左上から右下に実線を1として行に沿って読み取ります。 0ヘキサグラムとしての破線は0から63までのシーケンスとして解釈できます。 [7]

インド

インドの学者ピンガラ(紀元前2世紀頃)は、韻律を記述するためのバイナリシステムを開発しました。[8] [9]彼は、短い音節と長い音節の形式で2進数を使用し(後者は2つの短い音節と同じ長さ)、モールス信号に似ています。[10] [11]それらは、ラグー(軽い)およびグル(重い)音節として知られていました。

Pingalaのヒンドゥー教の古典であるChandaḥśāstra(8.23)は、各メーターに固有の値を与えるためのマトリックスの形成について説明しています。「Chandaḥśāstra」は、文字通りサンスクリット語のメートルの科学に翻訳されます。Pingalaのシステムの2進表現は、現代の位取り記数法の2進数のように、左ではなく右に向かって増加します。[10] [12] Pingalaのシステムでは、数字は0ではなく1から始まります。4つの短い音節「0000」は最初のパターンであり、値1に対応します。数値は、場所の値の合計に1を加算して得られます。[13]

他の文化

フランス領ポリネシアマンガレバ島の住民は、1450年以前はハイブリッドの2進数と10進数のシステムを使用していました。 [14]バイナリトーンのスリットドラムは、アフリカとアジア全体のメッセージをエンコードするために使用されます。[6]易経と同様のバイナリの組み合わせのセットは、イファ などの伝統的なアフリカの占いシステムや中世の西部のジオマンシーでも使用されています。

ライプニッツの西洋の前任者

13世紀後半、ラモンリュイは、当時の人間の知識のあらゆる分野におけるすべての知恵を説明するという野心を持っていました。その目的のために、彼は、コンピューティング科学と人工知能の前身と見なされてきた、いくつかの単純な基本原理またはカテゴリのバイナリの組み合わせに基づいた一般的な方法または「Arsgeneralis」を開発しました。[15]

1605年に、フランシスベーコンは、アルファベットの文字を2桁の数字のシーケンスに縮小し、ランダムなテキストのフォントのほとんど目に見えないバリエーションとしてエンコードできるシステムについて議論しました。[16]バイナリエンコーディングの一般的な理論にとって重要なこととして、彼は、この方法はすべてのオブジェクトで使用できると付け加えました。マスケット銃の報告、および同様の性質のあらゆる楽器による」。[16]ベーコンの暗号を参照してください。)

1617年にジョンネイピアは、文字による非位置表現を使用してバイナリ計算を行うための 位置演算と呼ばれるシステムについて説明しました。トーマス・ハリオットは、バイナリを含むいくつかの位置番号付けシステムを調査しましたが、彼の結果を公表しませんでした。それらは後で彼の論文の中で発見されました。[17] おそらくヨーロッパでのシステムの最初の出版は、1700年のJuan Caramuel yLobkowitzによるものでした。[18]

ライプニッツと易経

ゴットフリート・ライプニッツ

ライプニッツは1679年に2進数を研究しました。彼の作品は彼の記事Explicationdel'ArithmétiqueBinaire(1703年に出版)に掲載されています。ライプニッツの記事の完全なタイトルは、 「2進算術の説明。1と0の文字のみを使用し、その有用性と、古代中国の伏羲の人物に光を当てる」として英語に翻訳されています。[19]ライプニッツのシステムは、現代の2進数システムと同様に、0と1を使用します。ライプニッツの2進数システムの例は次のとおりです。[19]

0 0 01数値20
0 0 10数値21
0 1 00数値22
1 0 00数値23

ライプニッツは、易経の六十四卦を二進微積分の証拠として解釈しました。[20]シノファイル として、ライプニッツは易経に気づき、その六十四卦が0から111111までの二進法にどのように対応するかを興味深く指摘し、このマッピングは彼が賞賛した一種の哲学的数学における主要な中国の業績の証拠であると結論付けました。 。この関係は、言語または特性の普遍性という彼の普遍的な概念の中心的な考えであり、ゴットロープ・フレーゲジョージ・ブールなどの後継者が現代の象徴的論理を形成する際に密接に続く人気のある考えでした。[21] ライプニッツは最初に私は、1685年に宣教師として中国を訪れたフランスのイエズス会のジョアシャン・ブーベとの接触を通してチンします。ライプニッツは、易経の六十四卦を、キリスト教徒としての彼自身の宗教的信念の普遍性の肯定として[20] 2進数は、ライプニッツの神学の中心でした。彼は、2進数は、エクスニヒロの創造または無からの創造というキリスト教の考えを象徴していると信じていました[22]

[異教徒に伝えるのは簡単ではないという概念]は、神の全能の力によるエクスニヒロの創造です。ここでは、One and Zero or Nothingのシンプルで飾り気のない表現を通じて提示されているため、数字の起源ほどこの力を提示および実証できるものは、世界でないと言えます。

— 易経の六十四卦添付されたブランズウィック公へのライプニッツの手紙[20]

その後の開発

ジョージブール

1854年、英国の数学者ジョージブールは、ブール代数として知られるようになる論理の代数システムを詳述した画期的な論文を発表しました彼の論理的な計算は、デジタル電子回路の設計に役立つことでした。[23]

1937年、クロードシャノンは、 MITで、歴史上初めて電子リレーとスイッチを使用してブール代数と2進演算を実装した修士論文を作成しました。リレーおよびスイッチング回路のシンボリック分析と題されたシャノンの論文は、本質的に実用的なデジタル回路設計を確立しました。[24]

1937年11月、当時ベル研究所で働いていたジョージスティビッツは、バイナリ加算を使用して計算した「モデルK」(彼が組み立てた「キッチン」の略)と名付けたリレーベースのコンピューターを完成させました。[25]ベル研究所は、1938年後半に、スティビッツを指揮して完全な研究プログラムを承認した。1940年1月8日に完成した彼らの複素数コンピュータは、複素数を計算することができました。1940年9月11日にダートマス大学で開催されたアメリカ数学会の会議のデモンストレーションで、Stibitzはテレタイプによって電話回線を介してComplex NumberCalculatorのリモートコマンドを送信することができました。これは、電話回線を介してリモートで使用された最初のコンピューティングマシンでした。デモを目撃した会議の参加者の中には、ジョン・フォン・ノイマンジョン・モークリーノーバート・ウィーナーが、彼の回想録にそれについて書いていました。[26] [27] [28]

1935年から1938年の間にKonradZuseによって設計および構築されたZ1コンピューターは、ブール論理2進浮動小数点数を使用していました。[29]

表現

任意の数をビットのシーケンス(2進数)で表すことができ、ビットのシーケンスは、2つの相互に排他的な状態になり得る任意のメカニズムで表すことができます。次の記号の行はいずれも、667の2進数値として解釈できます。

1 0 1 0 0 1 1 0 1 1
| | | | | |
y n y n n y y n y y
バイナリクロックは、LEDを使用してバイナリ値を表す場合があります。この時計では、LEDの各列に、従来の六十進時間の2進化10進数が表示されます。

それぞれの場合に表される数値は、各シンボルに割り当てられた値によって異なります。コンピューティングの初期には、スイッチ、パンチ穴、およびパンチ紙テープがバイナリ値を表すために使用されていました。[30]最近のコンピューターでは、数値は2つの異なる電圧で表される場合があります。磁気 ディスクでは磁気極性を使用できます。 「正」、「はい」、または「オン」の状態は、必ずしも1の数値と同等ではありません。使用しているアーキテクチャによって異なります。

アラビア数字を使用した数字の通常の表現に合わせて、2進数は通常、記号0および1を使用して記述されます。2進数を記述する場合、2進数は、基数または基数を示すために、添え字、接頭辞、または接尾辞が付けられることがよくあります。次の表記法は同等です。

  • 100101バイナリ(形式の明示的なステートメント)
  • 100101b(バイナリ形式を示す接尾辞。Intel規則[31] [32]とも呼ばれます)
  • 100101B(バイナリ形式を示すサフィックス)
  • bin 100101(バイナリ形式を示すプレフィックス)
  • 100101 2(基数2(2進)表記を示す下付き文字)
  • %100101(バイナリ形式を示すプレフィックス。Motorola規則[31] [32]とも呼ばれます)
  • 0b100101(プログラミング言語で一般的なバイナリ形式を示すプレフィックス)
  • 6b100101(プログラミング言語で一般的なバイナリ形式のビット数を示すプレフィックス)
  • #b100101(Lispプログラミング言語で一般的なバイナリ形式を示すプレフィックス)

話されるとき、2進数は通常、10進数と区別するために、1桁ずつ読み取られます。たとえば、2進数の100は、その2進数の性質を明示的にするために、また正確さのために、100ではなく1つのゼロゼロと発音されます。2進数の100は値4を表すため、数字を100(完全に異なる値または量を表す単語)と呼ぶのは混乱を招きます。あるいは、2進数の100を「4」(正しい)として読み取ることもできますが、これによって2進数の性質が明確になるわけではありません。

バイナリで数える

10進
2進
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

2進数でのカウントは、他の記数法でのカウントと似ています。1桁の数字から始めて、カウントは各記号を昇順で進みます。バイナリカウントを検討する前に、参照のフレームとして 、より馴染みのある10進カウントシステムについて簡単に説明しておくと便利です。

10進数のカウント

10進数のカウントでは、0から9までの10個の記号を使用します。カウントは、最初の桁と呼ばれることが多い最下位桁(右端の桁)の増分置換から始まりますこの位置で使用可能なシンボルがなくなると、最下位桁が0にリセットされ、重要度の高い次の桁(1桁左)がインクリメント(オーバーフロー)され、下位桁の増分置換が再開されます。このリセットとオーバーフローの方法は、重要な桁ごとに繰り返されます。カウントは次のように進行します。

000、001、002、... 007、008、009、(右端の桁がゼロにリセットされ、左の桁がインクリメントされます)
0 1 0、011、012、..。
   ..。
090、091、092、... 097、098、099、(右端の2桁がゼロにリセットされ、次の桁がインクリメントされます)
1 00、101、102、..。

バイナリカウント

このカウンターは、0から31までの2進数でカウントする方法を示します。
それが印刷されているカードから番号を推測するパーティートリックは、番号のバイナリ表現のビットを使用します。SVGファイルで、カードをクリックして切り替えます

バイナリカウントは、2つのシンボル01のみが使用可能であることを除いて、同じ手順に従います。したがって、1桁が2進数で1に達した後、増分によって0にリセットされますが、次の桁が左側に増分されます。

0000、
000 1、(右端の桁が最初からやり直され、次の桁がインクリメントされます)
00 1 0、0011、(右端の2桁が最初からやり直し、次の桁がインクリメントされます)
0 1 00、0101、0110、0111、(右端の3桁が最初からやり直し、次の桁がインクリメントされます)
1 000、1001、1010、1011、1100、1101、1110、1111..。

バイナリシステムでは、各桁は2の累乗を表し、右端の桁は2 0を表し、次の桁は2 1を表し、次に22表します。2進数の値は、各「1」桁で表される2の累乗の合計です。たとえば、2進数100101は次のように10進数に変換されます。

100101 2 = [(1)×2 5 ] + [(0)×2 4 ] + [(0)×2 3 ] + [(1)×2 2 ] + [(0)×2 1 ] + [(1)× 20 ]
100101 2 = [ 1 ×32] + [ 0 ×16] + [ 0 ×8] + [ 1 ×4] + [ 0 ×2] + [ 1 ×1]
100101 2 = 37 10

分数

2進算術の分数は、 2が分母の唯一の素因数である場合にのみ終了します。その結果、1/10には有限の2進表現がありません(10には素因数25があります)。これにより、浮動小数点演算で10×0.1が1と正確に等しくなりません例として、1/3 = .010101 ...のバイナリ式を解釈するには、これは次のことを意味します。1/ 3 = 0× 2-1 +2−2 +2−3 + 1 × 2−4 + ... = 0.3125 + ... 2の有限数の逆数の合計では、正確な値を見つけることができません。1/ 3のバイナリ表現の0と1は永久に交互になります。

分数 10進数 バイナリ 分数近似
1/1 1 または 0.999..。 1 または 0.111..。 1/2 + 1/4 + 1/8..。
1/2 0.5 または 0.4999..。 0.1 または 0.0111..。 1/4 + 1/8 +1/16。
1/3 0.333..。 0.010101..。 1/4 + 1/16 +1/64。
1/4 0.25 または 0.24999..。 0.01 または 0.00111..。 1/8 + 1/16 +1/32。
1/5 0.2 または 0.1999..。 0.00110011..。 1/8 + 1/16 +1/128。
1/6 0.1666..。 0.0010101..。 1/8 + 1/32 +1/128。
1/7 0.142857142857..。 0.001001..。 1/8 + 1/64 +1/512。
1/8 0.125 または 0.124999..。 0.001 または 0.000111..。 1/16 + 1/32 +1/64。
1/9 0.111..。 0.000111000111..。 1/16 + 1/32 +1/64。
1/10 0.1 または 0.0999..。 0.000110011..。 1/16 + 1/32 +1/256。
1/11 0.090909..。 0.00010111010001011101..。 1/16 + 1/64 +1/128。
1/12 0.08333..。 0.00010101..。 1/16 + 1/64 +1/256。
1/13 0.076923076923..。 0.000100111011000100111011..。 1/16 + 1/128 +1/256。
1/14 0.0714285714285..。 0.0001001001..。 1/16 + 1/128 +1/1024。
1/15 0.0666..。 0.00010001..。 1/16 +1/256。
1/16 0.0625 または 0.0624999..。 0.0001 または 0.0000111..。 1/32 + 1/64 +1/128。

2進演算

2進数の算術は、他の記数法の算術とよく似ています。加算、減算、乗算、除算は2進数で実行できます。

追加

2ビットを加算して合計ビットとキャリービットを生成する2半加算器回路図

二項演算の最も単純な算術演算は加算です。2つの1桁の2進数を追加するのは比較的簡単で、次の形式を使用します。

0 + 0→0
0 + 1→1
1 + 0→1
1 + 1→0、キャリー1(1 + 1 = 2 = 0 +(1×2 1))

「1」の数字を2つ追加すると、「0」の数字が生成されますが、次の列に1を追加する必要があります。これは、特定の1桁の数値を合計した場合に10進数で発生することと似ています。結果が基数(10)の値以上の場合、左側の桁がインクリメントされます。

5 + 5→0、キャリー1(5 + 5 = 10 = 0 +(1×10 1))
7 + 9→6、キャリー1(7 + 9 = 16 = 6 +(1×10 1))

これはキャリングとして知られています。加算の結果が桁の値を超える場合、手順は、超過量を基数で割った値(つまり、10/10)を左側に「運び」、次の位置の値に加算することです。次の位置の重みは基数に等しい係数だけ高いため、これは正しいです。キャリングは、バイナリでも同じように機能します。

  1 1 1 1 1(桁数)
    0 1 1 0 1
+ 1 0 1 1 1
-------------
= 1 0 0 1 0 0 = 36

この例では、01101 2(13 10)と10111 2(23 10 )の2つの数字が加算されています。上の行は、使用されるキャリービットを示しています。右端の列から始めて、1 + 1 = 102。 1は左に運ばれ、0は右端の列の下部に書き込まれます。右から2番目の列が追加されます:1 + 0 + 1 = 102再び; 1が運ばれ、下部に0が書き込まれます。 3番目の列:1 + 1 + 1 = 112。今回は1が運ばれ、下の行に1が書き込まれます。このように進めると、最終的な答えは100100 2(36 10)になります。

コンピューターが2つの数値を加算する必要がある場合、次のルール:任意の2ビットxおよびyに対して x xor y =(x + y)mod 2を使用すると、非常に高速な計算も可能になります。

ロングキャリー方式

多くのバイナリ加算問題の単純化は、バイナリ加算のロングキャリー法またはブルックハウス法ですこの方法は、一般に、数値の1つに1の長い「文字列」が含まれる2進数の加算で役立ちます。これは、バイナリシステムでは、完全にn個の数字で構成される「文字列」 (nは任意の整数の長さ)が与えられた場合、1を加算すると、数値1の後にn個のゼロの文字列が続くという単純な前提に基づいています。その概念は、論理的には、10進法の場合と同じように続きます。ここで、n 9の文字列に1を加算する、数値1の後にn0の文字列が続きます。

     2進化10進数
    1 1 1 11同様に99 9 9 9
 + 1 + 1
  ——————————— ———————————
  1 0 0 0 0 0 1 0 0 0 0 0

このような長い文字列は、バイナリシステムでは非常に一般的です。そのことから、過度のキャリー操作なしで、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                        1 1 1 0 1 1 1 1 10「文字列」を取り消します。
+ 1 0 1 0 1 1 0 0 1 1 + 1 0 1 0 1 1 0 0 11そしてそれに追加された数字を消します
——————————————————————————————————————————————
= 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
0 0 1
1 1 10

2進加算表は、論理和演算の真理値表と似ていますが、同じではありません。違いは、 その間

減算

減算はほとんど同じように機能します。

0 −0→0
0 − 1→1、借りる1
1 −0→1
1 −1→0

「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の補数表記の減算を使用すると、次の式で要約できます。

A − B = A +ではなくB + 1

掛け算

2進数での乗算は、10進数での乗算に似ています。2つの数値ABに部分積を掛けることができます。Bの各桁についてAのその桁の積が計算されて新しい行に書き込まれ、右端の桁がBの桁と一致するように左にシフトされます。使用済み。これらすべての部分積の合計が最終結果になります。

2進数には2桁しかないため、各部分乗算の結果は2つしかありません。

  • Bの桁が0の場合、部分積も0です。
  • Bの桁が1の場合、部分積はAに等しくなります。

たとえば、2進数の1011と1010は次のように乗算されます。

           1 0 1 1(A
         ×10 1 0(B
         ---------
           0 0 00←Bの右端の「ゼロ」に対応
   +1 0 11← Bの次の「1」に対応
   + 0 0 0 0
   + 1 0 1 1
   ---------------
   = 1 1 0 1 1 1 0

2進数は、 2進数の後にビットを掛けることもできます

               1 01。1 0 1      A(10進数で5.625)
             ×110。0 1        B(10進数で6.25)
             -------------------
                   1。0 1 1 01← B 
     + 00の「1」に対応します。0 0 00← Bの「ゼロ」に対応
     + 0 00。0 0 0
     + 1 0 11。01
     + 1 0 1 10。1
     ---------------------------
     = 1 0 0 0 11。0 0 1 0 1(10進数で35.15625)

ブースの乗算アルゴリズムも参照してください

九九

0 1
0 0 0
1 0 1

2進乗算表は、論理積演算の真理値表と同じです。

分割

2進数の筆算も、10進数に似ています。

以下の例では、除数は101 2、つまり10進数で5ですが、被除数は11011 2、つまり10進数で27です。手順は10進数の筆算と同じです。ここで、除数1012は被除数の最初の3桁1102一度入るので、一番上の行に「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

したがって、110112を1012で割った商は、上の行に示されているように101 2あり、下の行に示されている余り102です10進数では、これは27を5で割った値が5で、余りが2であるという事実に対応します。

筆算は別として、各反復で部分剰余から過剰減算できるように手順を考案することもできます。これにより、体系的ではありませんが、結果としてより柔軟な代替方法が得られます。

平方根

2進数の平方根を1桁ずつ取得するプロセスは、10進数の平方根の場合と同じであり、ここで説明します。例は次のとおりです。

             1 0 0 1
            ---------
           √1010001
             1
            ---------
      101 01 
               0
             --------
      1001 100
                 0
             --------
      10001 10001
               10001
              -------
                   0

ビット演算

2進記号の数値解釈とは直接関係ありませんが、ビットのシーケンスはブール論理演算子を使用して操作できます。バイナリシンボルの文字列がこのように操作される場合、それはビット演算と呼ばれます。論理演算子ANDOR、およびXORは、入力として提供される2つの2進数の対応するビットに対して実行できます。論理NOT演算は、入力として提供される単一の2進数の個々のビットに対して実行できます。このような演算は、算術ショートカットとして使用される場合があり、他の計算上の利点もある場合があります。たとえば、算術シフト2進数の左側は、2の(正の整数の)累乗による乗算に相当します。

他の記数法との間の変換

10進数から2進数

(357)10を2進表記に変換すると、(101100101)になります。

10を底とする整数からそれに相当する2を底とする(2進数)に変換するには、数値を2で除算します。余りは最下位ビットです。商は再び2で割られます。その余りは次の最下位ビットになります。このプロセスは、商が1に達するまで繰り返されます。剰余のシーケンス(1の最終商を含む)は2進値を形成します。これは、各剰余が2で割るときに0または1でなければならないためです。たとえば、(357)10は(101100101)2として表されます。 [33]

2進数から10進数

基数2から基数10に変換すると、前述のアルゴリズムが単純に反転します。2進数のビットは、最上位(左端)のビットから1つずつ使用されます。値0から始めて、前の値が2倍になり、次のビットが追加されて次の値が生成されます。これは、複数列のテーブルにまとめることができます。たとえば、10010101101 2を10進数 に変換するには、次のようにします。

以前の値 ×2 + 次のビット 次の値
0 ×2 + 1 = 1
1 ×2 + 0 = 2
2 ×2 + 0 = 4
4 ×2 + 1 = 9
9 ×2 + 0 = 18
18 ×2 + 1 = 37
37 ×2 + 0 = 74
74 ×2 + 1 = 149
149 ×2 + 1 = 299
299 ×2 + 0 = 598
598 ×2 + 1 = 1197

結果は119710です最初の事前値0は、単に初期の10進値です。この方法は、ホーナースキームのアプリケーションです。

バイナリ  1 0 0 1 0 1 0 1 1 0 1
10進数  1 ×210 + 29 + 28 + 27 + 26 + 25 + 24 + 1 ×23 + 22 + 21 + 20 = 1197

数値の小数部分は、同様の方法で変換されます。これらもまた、2倍または2分の1にシフトすることと同等であることに基づいています。

0.11010110101 2などの小数の2進数では、最初の桁は、 二番目 、など。したがって、小数点以下の最初の場所に1がある場合、その数は少なくとも 、 およびその逆。その数の2倍は少なくとも1です。これはアルゴリズムを示唆しています。変換する数を繰り返し2倍にし、結果が1以上かどうかを記録してから、整数部分を破棄します。

例えば、 10は、バイナリでは次のとおりです。

変換 結果
0。
0.0
0.01
0.010
0.0101

したがって、循環小数0.3 ...は、循環小数0. 01 ...と同等です

または、たとえば、バイナリの0.110は次のとおりです

変換 結果
0.1 0。
0.1×2 = 0.2 <1 0.0
0.2×2 = 0.4 <1 0.00
0.4×2 = 0.8 <1 0.000
0.8×2 = 1.6≥1 0.0001
0.6×2 = 1.2≥1 0.00011
0.2×2 = 0.4 <1 0.000110
0.4×2 = 0.8 <1 0.0001100
0.8×2 = 1.6≥1 0.00011001
0.6×2 = 1.2≥1 0.000110011
0.2×2 = 0.4 <1 0.0001100110

これも繰り返しの2進数の分数0.00011 ...です。小数の終了が2進数で繰り返し展開される可能性があるのは、驚くかもしれません。0.1 + ... + 0.1、(10回の加算)が浮動小数点演算で1と異なることに多くの人が驚いているのは、このためです実際、展開が終了する2進数の分数は、整数を2の累乗で割った形式のみですが、1/10はそうではありません。

最終的な変換は、2進数から10進数への変換です。分数を繰り返す場合にのみ問題が発生しますが、それ以外の場合は、分数を整数にシフトし、上記のように変換してから、10進数で適切な2の累乗で除算します。例えば:

2進数から10進数に変換する別の方法は、16進数に精通している人にとってはより高速ですが、間接的に変換することです。最初に変換します(バイナリで)に(16進数で)そして変換(16進数で)に(10進数)。

非常に大きな数の場合、これらの単純な方法は、1つのオペランドが非常に大きい場合に多数の乗算または除算を実行するため、非効率的です。単純な分割統治アルゴリズムは漸近的に効果的です。2進数が与えられると、10 kで除算されます。ここで、kは、商が余りとほぼ等しくなるように選択されます。次に、これらの各部分が10進数に変換され、2つが連結されます。10進数を指定すると、ほぼ同じサイズの2つのピースに分割でき、それぞれが2進数に変換されます。次に、最初の変換されたピースに10 kが掛けられ、2番目の変換されたピースに追加されます。ここでk は、変換前の2番目の最下位部分の小数点以下の桁数です。

16進数

0ヘクス = 12月0日 = 0 oct 0 0 0 0
1ヘクス = 12月1 = 10月1 0 0 0 1
2ヘクス = 12月2 = 2オクト 0 0 1 0
3ヘクス = 12月3 = 10月3 0 0 1 1
4ヘクス = 12月4 = 10月4 0 1 0 0
5ヘクス = 12月5 = 10月5 0 1 0 1
6ヘクス = 12月6 = 10月6 0 1 1 0
7ヘクス = 12月7 = 10月7 0 1 1 1
8ヘクス = 12月8 = 10月10 1 0 0 0
9ヘクス = 12月9 = 10月11 1 0 0 1
ヘクス_ = 12月10 = 10月12 1 0 1 0
Bヘックス = 12月11 = 10月13 1 0 1 1
Cヘックス = 12月12 = 10月14 1 1 0 0
D hex = 12月13 = 10月15 1 1 0 1
Eヘックス = 12月14 = 10月16 1 1 1 0
F hex = 12月15 = 10月17 1 1 1 1

2進数は、16進数との間でより簡単に変換できます。これは、16進法(16)の基数が2進法(2)の基数の累乗であるためです。具体的には、16 = 2 4であるため、隣接する表に示すように、1桁の16進数を表すには4桁の2進数が必要です。

16進数を同等の2進数に変換するには、対応する2進数に置き換えるだけです。

3A 16 = 0011 1010 2
E7 16 = 1110 0111 2

2進数を16進数に変換するには、4ビットのグループに分割します。ビット数が4の倍数でない場合は、左側に余分な0ビットを挿入するだけです(パディングと呼ばれます)。例えば:

1010010 2 = 01010010パディングでグループ化= 52 16
11011101 2 = 11011101グループ化= DD 16

16進数を10進数に変換するには、各16進数の10進数に対応する16の累乗を掛けて、結果の値を加算します。

C0E7 16 =(12×16 3)+(0×16 2)+(14×16 1)+(7×16 0)=(12×4096)+(0×256)+(14×16)+( 7×1)= 49,383 10

8進数

2進数は2の累乗である8の基数を使用するため(つまり、2 3であるため、8進数を表すには正確に3つの2進数が必要です) 、2進数も8数システムに簡単に変換できます。8進数と2進数の対応は、上の表の16進数の最初の8桁と同じです。2進数の000は8進数の0に相当し、2進数の111は8進数の7に相当します。

オクタル バイナリ
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

8進数から2進数への変換は、16進数の場合と同じ方法で進行します。

65 8 = 110101 2
17 8 = 001 111 2

そして、2進数から8進数へ:

101100 2 = 1011002グループ化= 54 8
10011 2 = 010 0112パディングでグループ化= 23 8

そして、8進数から10進数へ:

65 8 =(6×8 1)+(5×8 0)=(6×8)+(5×1)= 53 10
127 8 =(1×8 2)+(2×8 1)+(7×8 0)=(1×64)+(2×8)+(7×1)= 87 10

実数の表現

非整数は、基数ポイント(小数点システムでは小数点と呼ばれます)によって他の桁から引き離される負の累乗を使用して表すことができます。たとえば、2進数11.012次のことを意味します。

1 × 21 (1×2 = 2 プラス
1 × 20 (1×1 = 1 プラス
0 × 2-1 0 × 1⁄2 = 0 プラス
1 × 2−2 1 × 1⁄4 = 0.25

合計で小数点以下3.25桁。

すべての2進分数 終了する2進数があります。2進数表現には、基数点の後に有限数の項があります。他の有理数は2進表現ですが、終了する代わりに、有限の数字のシーケンスが無期限に繰り返されて繰り返されます例えば

有理数の2進表現が終了または繰り返し発生するという現象は、他の基数ベースの記数法でも発生します。たとえば、10進数の説明を参照してください。もう1つの類似点は、 0.111111 ...等比数列2-1 + 2 −2 + 2 −3 + ... の合計であるという事実に依存する、任意の終了表現の代替表現の存在です。

終了も再発もしない2進数は、無理数を表します。例えば、

  • 0.10100100010000100000100 ...パターンはありますが、固定長の繰り返しパターンではないため、数は不合理です
  • 1.0110101000001001111001100110011111110 ...はのバイナリ表現です2の平方根、別の不合理。識別可能なパターンはありません。

も参照してください

参考文献

  1. ^ ロブソン、エリナー; Stedall、Jacqueline、eds。(2009)、「神話その2:ホルスの目の分数」、数学史のオックスフォードハンドブック、オックスフォード大学出版局、p。790、ISBN 9780199213122
  2. ^ Chrisomalis、Stephen(2010)、Numerical Notation:A Comparison History、Cambridge University Press、pp。42–43、ISBN 9780521878180
  3. ^ Rudman、Peter Strom(2007)、数学がどのように起こったか:最初の50、000年、Prometheus Books、pp。135–136、ISBN 9781615921768
  4. ^ ab エドワードハッカー; スティーブ・ムーア; ロレーヌ・パッスコ(2002)。I Ching:注釈付き参考文献ラウトレッジ。p。13. ISBN 978-0-415-93969-0
  5. ^ a b Redmond&Hon(2014)、p。227。
  6. ^ a b Jonathan Shectman(2003)。18世紀の画期的な科学実験、発明、発見グリーンウッド出版。p。29. ISBN 978-0-313-32015-6
  7. ^ Zhonglian、Shi; ウェンザオ、リー; ポーザー、ハンス(2000)。LeibnizのバイナリシステムとShaoYongの「XiantianTuin:DasNeuesteüberChina:GW Leibnizens Novissima Sinica von 1697:Internationales Symposium、Berlin 4. bis 7. Oktober 1997シュトゥットガルト:Franz Steiner Verlag pp。165–170。ISBN 3515074481
  8. ^ サンチェス、フリオ; カントン、マリアP.(2007)。マイクロコントローラープログラミング:マイクロチップPICフロリダ州ボカラトン:CRC Press p。37. ISBN 978-0-8493-7189-9
  9. ^ WS Anglin and J. Lambek、 The Heritage of Thales、Springer、1995、 ISBN 0-387-94544-X 
  10. ^ ab 古代インドの2進数
  11. ^ Wayback Machineで2012年6月16日にアーカイブされた詩人とドラマーのための数学 (pdf、145KB)
  12. ^ Stakhov、Alexey ; オルセン、スコットアンソニー(2009)。調和の数学:ユークリッドから現代の数学やコンピューターサイエンスまでISBN 978-981-277-582-5
  13. ^ B. van Nooten、「インドの古代における2進数」、Journal of Indian Studies、第21巻、1993年、31〜50ページ
  14. ^ ベンダー、アンドレア; Beller、Sieghard(2013年12月16日)。「計算を容易にするためのバイナリステップのマンガレバ語の発明」国立科学アカデミーの議事録111(4):1322–1327。土井10.1073 /pnas.1309160110PMC3910603_ PMID24344278_  
  15. ^ (Bonner 2007 [1] 2014年4月3日にWaybackMachineでアーカイブ Fidoraetal。2011 [2]を参照)
  16. ^ a b ベーコン、フランシス(1605)。「学習の進歩」ロンドン。pp。第1章。
  17. ^ シャーリー、ジョンW.(1951年)。「ライプニッツの前の2進数」。American Journal ofPhysics19(8):452–454。Bibcode1951AmJPh..19..452S土井10.1119 /1.1933042
  18. ^ Ineichen、R。(2008)。「ライプニッツ、カラミュエル、ハリオットウントダスデュアルシステム」(PDF)Mitteilungen der deutschen Mathematiker-Vereinigung(ドイツ語)。16(1):12–15。土井10.1515 / dmvm-2008-0009S2CID179000299_  
  19. ^ a b Leibniz G.、Explicationdel'ArithmétiqueBinaire、Die Mathematische Schriften、ed。C. Gerhardt、Berlin 1879、vol.7、p.223; Engl。翻訳。[3]
  20. ^ a b c J.EHスミス(2008)。ライプニッツ:どのような合理主義者?:どのような合理主義者?スプリンガー。p。415. ISBN 978-1-4020-8668-7
  21. ^ Aiton、Eric J.(1985)。ライプニッツ:伝記テイラーアンドフランシス。pp。245–8。ISBN 0-85274-470-6
  22. ^ Yuen-Ting Lai(1998)。ライプニッツ、神秘主義と宗教スプリンガー。pp。149–150。ISBN 978-0-7923-5223-5
  23. ^ ブール、ジョージ(2009)[1854]。論理と確率の数学的理論の基礎となる思考の法則の調査(Macmillan、Dover Publications、訂正[1958]版で転載)。ニューヨーク:ケンブリッジ大学出版局。ISBN 978-1-108-00153-3
  24. ^ シャノン、クロード・エルウッド(1940)。リレーおよびスイッチング回路のシンボリック分析ケンブリッジ:マサチューセッツ工科大学。hdl1721.1 / 11173
  25. ^ 「国民の発明者の殿堂–ジョージR.スティビッツ」2008年8月20日。2010年7月9日のオリジナルからアーカイブ2010年7月5日取得
  26. ^ 「ジョージスティビッツ:バイオ」デニソン大学数学およびコンピュータサイエンス学部。2004年4月30日2010年7月5日取得
  27. ^ 「パイオニア–違いを生んだ人々とアイデア–ジョージ・スティビッツ(1904–1995)」ケリー・レッドショー。2006年2月20日2010年7月5日取得
  28. ^ 「ジョージロバートスティビッツ–死亡記事」カリフォルニアのコンピュータ歴史協会。1995年2月6日2010年7月5日取得
  29. ^ Rojas、R。(1997)。「コンラート・ツーゼの遺産:Z1とZ3のアーキテクチャ」(PDF)コンピューティングの歴史のIEEE年報19(2):5–15。土井10.1109 /85.586067
  30. ^ 「バイナリの紹介-リビジョン1-GCSEコンピュータサイエンス」BBC 2019年6月26日取得
  31. ^ abKüveler Gerd; Schwoch、Dietrich(2013)[1996]。ArbeitsbuchInformatik-einepraxisorientierteEinführungindieDatenverarbeitungmit Projektaufgabe(ドイツ語)。Vieweg-Verlag、再版:Springer-Verlag。土井10.1007 / 978-3-322-92907-5ISBN 978-3-528-04952-29783322929075。
  32. ^ abKüveler Gerd; Schwoch、Dietrich(2007年10月4日)。InformatikfürIngenieureundNaturwissenschaftler:PC- und Mikrocomputertechnik、Rechnernetze(ドイツ語)。2(5版)。Vieweg、再版:Springer-Verlag。ISBN 978-38348919149783834891914。
  33. ^ 「基本システム」2016年8月31日取得

さらに読む

  • サンチェス、フリオ; カントン、マリアP.(2007)。マイクロコントローラープログラミング:マイクロチップPICフロリダ州ボカラトン:CRCプレス。p。37. ISBN 978-0-8493-7189-9
  • レドモンド、ジェフリー; 本、ツェキ(2014)。易経を教えるオックスフォード大学出版局。ISBN 978-0-19-976681-9

外部リンク